MD5:
public class RSAEncryption {
// 创建密钥对生成器,指定加密和解密算法为RSA
public String[] Skey_RSA(int keylen) {// 输入密钥长度
String[] output = new String[keylen];// 用来存储密钥的e n d p q
try {
SecureRandom sr = new SecureRandom();
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024,sr);// 指定密钥的长度,初始化密钥对生成器
KeyPair kp = kpg.generateKeyPair();// 生成密钥对
RSAPublicKey puk = (RSAPublicKey) kp.getPublic();// 获得公钥
RSAPrivateCrtKey prk = (RSAPrivateCrtKey) kp.getPrivate();
BigInteger e = puk.getPublicExponent();
BigInteger n = puk.getModulus();
BigInteger d = prk.getPrivateExponent();
BigInteger p = prk.getPrimeP();
BigInteger q = prk.getPrimeQ();
output[0] = e.toString();
output[1] = n.toString();
output[2] = d.toString();
output[3] = p.toString();
output[4] = q.toString();
} catch (Exception e) {
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, e);
}
return output;
}
// 加密 在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
public String Enc_RSA(String mingwen, String eStr, String nStr) {
String miwen = new String();
try {
BigInteger e = new BigInteger(eStr);
BigInteger n = new BigInteger(nStr);
byte[] ptext = mingwen.getBytes("UTF8");
BigInteger m = new BigInteger(ptext);
BigInteger c = m.modPow(e, n);
miwen = c.toString();
} catch (Exception e) {
// TODO: handle exception
Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, e);
}
return miwen;
}
// 解密
public String Dec_RSA(String miwen, String dStr, String nStr) {
StringBuffer mingwen = new StringBuffer();
BigInteger d = new BigInteger(dStr);// 获取私钥的参数d,n
BigInteger n = new BigInteger(nStr);
BigInteger c = new BigInteger(miwen);
BigInteger m = c.modPow(d, n);
byte[] mt = m.toByteArray();
for (int i = 0; i < mt.length; i++) {
mingwen.append((char)mt[i]);
}
return mingwen.toString();
}
}