当前位置: 代码迷 >> Android >> android上的MD5跟RSA的加解密
  详细解决方案

android上的MD5跟RSA的加解密

热度:69   发布时间:2016-05-01 20:21:49.0
android上的MD5和RSA的加解密
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"));	}}
  相关解决方案