欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android上的MD5和RSA的加解密

程序员文章站 2022-07-04 14:43:17
...
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
	/*
	 * MD5加密
	 */
	public static String getDigest(String str) {
		MessageDigest messageDigest = null;

		try {
			messageDigest = MessageDigest.getInstance("MD5");
			messageDigest.reset();
			messageDigest.update(str.getBytes("UTF-8"));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		byte[] byteArray = messageDigest.digest();
		StringBuffer md5StrBuff = new StringBuffer();

		for (int i = 0; i < byteArray.length; i++) {
			if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
				md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
			else
				md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
		}
		return md5StrBuff.toString().toUpperCase();
	}
}


import java.math.BigInteger;
import java.security.Key;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;

import javax.crypto.Cipher;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class RSAUtil {
	/**
	 * 加密
	 * 
	 * @param message
	 * @return
	 */
	public static String encrypt(String message) {
		byte[] result = null;

		try {
			result = encrypt(message, getPublicKey());
		} catch (Exception e) {
			e.printStackTrace();
		}

		return toHexString(result);
	}

	/**
	 * 解密
	 * 
	 * @param message
	 * @return
	 */
	public static String decrypt(String message) {
		byte[] result = null;

		try {
			result = decrypt(message, getPublicKey());
		} catch (Exception e) {
			e.printStackTrace();
		}

		return new String(result);
	}

	/**
	 * 加密(公钥加密、私钥加密)
	 * 
	 * @param message 待加密的消息
	 * @param key 公钥或私钥
	 * @return
	 * @throws Exception
	 */
	private static byte[] encrypt(String message, Key key) throws Exception {
		Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());
		cipher.init(Cipher.ENCRYPT_MODE, key);

		// 注意中文的处理
		return cipher.doFinal(message.getBytes("gb2312"));
	}

	/**
	 * 解密(如果公钥加密,则用私钥解密;如果私钥加密,则用公钥解密)
	 * 
	 * @param message 待解密的消息
	 * @param key 公钥或私钥
	 * @return
	 * @throws Exception
	 */
	private static byte[] decrypt(String message, Key key) throws Exception {
		Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());
		cipher.init(Cipher.DECRYPT_MODE, key);
		return cipher.doFinal(toBytes(message));
	}

	/**
	 * 通过模长和公钥指数获取公钥
	 * 
	 * @param modulus 模长
	 * @param publicExponent 公钥指数
	 * @return
	 * @throws Exception
	 */
	public static PublicKey getPublicKey() {
		PublicKey publicKey = null;
		String modulus = "140865665237544398577638791993321201143991791099370252934699963963887058026979531275917645451893685346013654333931757603593193739776986525943697469996693704995753266331593233395038088698299308180612215713544577462613426793519824197226393059683065343801412208205295045502348474411031999124137863144916358656019";
		String publicExponent = "65537";
		BigInteger m = new BigInteger(modulus);
		BigInteger e = new BigInteger(publicExponent);
		RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e);

		try {
			KeyFactory keyFactory = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
			publicKey = keyFactory.generatePublic(keySpec);
		} catch (Exception e1) {
			e1.printStackTrace();
		}

		return publicKey;
	}

	private static final byte[] toBytes(String s) {
		byte[] bytes;
		bytes = new byte[s.length() / 2];
		for (int i = 0; i < bytes.length; i++) {
			bytes[i] = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2), 16);
		}
		return bytes;
	}

	public static String toHexString(byte[] b) {
		StringBuilder sb = new StringBuilder(b.length * 2);
		for (int i = 0; i < b.length; i++) {
			sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
			sb.append(HEXCHAR[b[i] & 0x0f]);
		}
		return sb.toString();
	}

	private static char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
}


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		String info = "不知道什么时候,开始喜欢这里,每个夜里都会来这里看你。";
		Log.d("zhangxy",MD5.getDigest(info));
		// 公钥加密
		Log.d("zhangxy",RSAUtil.encrypt(info));
		// 公钥解密(经私钥加密)
		Log.d("zhangxy", RSAUtil.decrypt("94d5ffca913465785714348f10c57c8a0226aca2c8a5294d3a32f398c4791bee8bb37873e16a7b71ed64e40ac121ec4f4bf375b881421a17a3f10789dc543ab41c26c11ba1184b2e0328ef6d354e191f7d978bd9b984e76d310e028b3412093f7296d58d9adb7f9e4b5eb6427c369ae5e919f848c7a21b7794d5985e4d3ad10a"));
	}
}