ホームページ  >  記事  >  Java  >  Android md5 暗号化と rsa 暗号化および復号化の実装コード

Android md5 暗号化と rsa 暗号化および復号化の実装コード

高洛峰
高洛峰オリジナル
2017-01-24 11:29:441828ブラウズ

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")); 
} 
}

Android md5 暗号化および RSA 暗号化および復号化実装コードに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。