rsa 2048 java_java-RSA 2048加密解密-异常

好的,RSACrypto中的问题.加密文件时,它每次都会创建新的密钥对(用于加密).只需从加密中删除新的密钥对生成,然后在需要时直接调用newKeyPair.

而且静态变量对多线程环境不利.

我建议抛出RSACrypto类,或者至少重写它.我不知道为什么您如此害怕使用byte []类型,以及为什么您需要所有内容都进行BASE64编码.如果没有其他编码/解码,代码将非常简单.

这是工作示例(没有RSACrypto),您可以将其用作模板:

File file = new File("C:\temp-ldi\pubkey.txt");

FileWriter writer = new FileWriter(file);

file.createNewFile();

KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");

generator.initialize(2048, new SecureRandom());

KeyPair keyPayr = generator.generateKeyPair();

writer.write(new BASE64Encoder().encode(keyPayr.getPublic().getEncoded()));

writer.flush();

writer.close();

file = new File("C:\temp-ldi\privkey.txt");

writer = new FileWriter(file);

file.createNewFile();

writer.write(new BASE64Encoder().encode(keyPayr.getPrivate().getEncoded()));

writer.flush();

writer.close();

File privfile = new File("C:\temp-ldi\privkey.txt");

File pubfile = new File("C:\temp-ldi\pubkey.txt");

FileReader reader = new FileReader(pubfile);

BufferedReader br = new BufferedReader(reader);

StringBuilder sb = new StringBuilder();

String s;

while ((s = br.readLine()) != null) {

sb.append(s);

}

br.close();

reader.close();

PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(new BASE64Decoder().decodeBuffer(sb.toString())));

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

String encryptedText = new BASE64Encoder().encode(cipher.doFinal("PLAIN TEXT".getBytes("UTF-8")));

System.out.println("encrypted: " + encryptedText);

reader = new FileReader(privfile);

br = new BufferedReader(reader);

sb = new StringBuilder();

while ((s = br.readLine()) != null) {

sb.append(s);

}

br.close();

reader.close();

PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(new BASE64Decoder().decodeBuffer(sb.toString())));

cipher.init(Cipher.DECRYPT_MODE, privateKey);

System.out.println( new String(cipher.doFinal (new BASE64Decoder().decodeBuffer(encryptedText))));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值