62,614
社区成员
发帖
与我相关
我的任务
分享
/** *//**
* 生成2048位的RSA公匙和私匙
*/
public static void generator(
String privateKeyFileName) throws Exception
{
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.generateKeyPair();
PublicKey puk = kp.getPublic();
PrivateKey prk = kp.getPrivate();
FileOutputStream fos1 = new FileOutputStream("mypub.key");
FileOutputStream fos2 = new FileOutputStream("mypri.key");
ObjectOutputStream oos1 = new ObjectOutputStream(fos1);
ObjectOutputStream oos2 = new ObjectOutputStream(fos2);
oos1.writeObject(puk);
oos2.writeObject(prk);
oos1.close();
oos2.close();
fos1.close();
fos2.close();
System.out.println("公匙生成成功!公匙文件为mypub.key");
System.out.println("私匙生成成功!私匙文件为mypri.key");
/** *//**
* 解密方法
*
* @param String
* 私匙文件
* @param String
* 加密后的字符串
* @return String 解密后的字符串
*/
public String RSA2S(String fileName, String rsaStr) throws Exception
{
// 获取私匙
RSAPrivateKey rsaprk = RSAKey.getPrivateKey(fileName);
// 获取私匙参数d,n
BigInteger d = rsaprk.getPrivateExponent();
BigInteger n = rsaprk.getModulus();
// 获取密文
BigInteger c = new BigInteger(rsaStr);
// 解密计算
BigInteger m = c.modPow(d, n);
// 转换成String
byte[] ctext = m.toByteArray();
return new String(ctext);
}
}