gpt4 book ai didi

java - java中长消息的RSA加解密

转载 作者:行者123 更新时间:2023-11-30 05:56:34 25 4
gpt4 key购买 nike

我想使用 java 标准库,据我所知,它的函数输入是有限的。为此,我实现了两种方法。他们在这里:

private byte[] RSAenc(String in) throws Exception {
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.ENCRYPT_MODE, privKey);
int l = in.length();

byte[] part;
byte[] result = new byte[(int)(64*java.lang.Math.ceil(l/20.0))];
int i = 0;
while(i*20+20<l) {
part = c.doFinal(in.substring(i*20,i*20+19).getBytes("UTF-8"));
System.arraycopy(part, 0, result, i*64, part.length);
i = i+1;
}
part = c.doFinal(in.substring(i*20,l-1).getBytes("UTF-8"));
System.arraycopy(part, 0, result, i*64, part.length);
return result;

}

private String RSAdec(byte [] in) throws Exception {
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.DECRYPT_MODE, privKey);

String result = "";
byte[] part = new byte[64];
int l = in.length;
int i = 0;
while(i+64<=l) {
System.arraycopy(in, i, part, 0, part.length);
result = result + new String(c.doFinal(part), "UTF-8");
i= i+64;
}
return result;
}

它们以这种方式工作:为了加密,我将字符串分解为最多 20 个大小的子字符串,然后使用 Cipher 对其进行加密。对于解密,我将字节数组分解为 64 字节 block ,并对它们应用 Cipher 解密。是否已经有执行此操作的功能?或者至少有更简洁的解决方案吗?我的方法有多安全?加密结果长度 (result.length) 在 JRE 的所有发行版上是否始终为 64?

谢谢,

最佳答案

RSA 适用于 key 加密,不适用于批量数据加密。

大多数协议(protocol)不是使用 RSA 加密消息,而是为对称密码(如 AES)生成 key ,并用它加密消息。然后,RSA 用于加密该对称 key ,以便只有消息接收者才能恢复它。 RSA 加密的对称 key 与 AES 加密的消息一起发送给收件人。

关于java - java中长消息的RSA加解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6960729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com