Home >Java >javaTutorial >Android md5 encryption and rsa encryption and decryption implementation code

Android md5 encryption and rsa encryption and decryption implementation code

高洛峰
高洛峰Original
2017-01-24 11:29:441856browse

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 = { &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39; }; 
}
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")); 
} 
}

For more articles related to android md5 encryption and rsa encryption and decryption implementation code, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn