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")); } }
上一篇: RSA加密与解密(转)
下一篇: OpenSSH原理及部署
推荐阅读
-
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
-
wi - fi感知 运行Android 8.0(API级别26)和更高的设备上
-
Android中 MD5、RC4、DES、DESede (3DES)、RSA、AES、自定义填充方式的 AES加密/解密算法
-
android上的MD5和RSA的加解密
-
[bug]android monkey命令在Android N和Android O上的一点差异发现
-
python实现AES和RSA加解密的方法
-
i.mx6 android4.4.3 recovery时不删除内部SD卡上的导航地图和媒体文件等
-
android上的MD5和RSA的加解密
-
phonegap+jqm开发的应用(android版)转到黑莓上后存在的问题和不兼容情况及其解决办法
-
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)