Heim  >  Artikel  >  Java  >  Android MD5-Verschlüsselung und RSA-Verschlüsselungs- und Entschlüsselungsimplementierungscode

Android MD5-Verschlüsselung und RSA-Verschlüsselungs- und Entschlüsselungsimplementierungscode

高洛峰
高洛峰Original
2017-01-24 11:29:441828Durchsuche

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

Weitere Artikel zum Implementierungscode für Android MD5-Verschlüsselung und RSA-Verschlüsselung und -Entschlüsselung finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn