gpt4 book ai didi

java - 使用 RSA 加密长字符串 (Java)

转载 作者:搜寻专家 更新时间:2023-11-01 02:51:52 24 4
gpt4 key购买 nike

我在使用 Java 编写的 RSA 应用程序时遇到了问题。

我必须从文件中读取一个字符串,对其进行加密,然后将加密后的字符串保存到一个新文件中。

我的 RSA key 长 1024 位。

问题所在的代码部分如下:

            readBytes = in.read(bytesToBeEncoded, 0, bytesToBeEncoded.length);

while(readBytes != -1){
encodedContent = ciph.update(bytesToBeEncoded, 0, readBytes);
out.write(encodedContent);
bytesToBeEncoded= new byte[(KEY_SIZE/8)-11];
readBytes = in.read(bytesToBeEncoded, 0, bytesToBeEncoded.length);
}

encodedContent = ciph.doFinal();
out.write(encodedContent);

变量定义如下:

        byte[] bytesToBeEncoded = new byte[(KEY_SIZE/8)-11]; 

FileInputStream in = new FileInputStream(new File(file1));
FileOutputStream out = new FileOutputStream(new File(file2));
int readBytes;

关键是,当我加密一个小于 117 字节的字符串时,它工作得很好(加密然后解密很好),但是当大小更大时,应用程序抛出这个异常:

javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes

抛出者:

encodedContent = ciph.doFinal();

我不知道问题出在哪里,我该怎么办。

谁能帮帮我?谢谢。

对不起我的英语。

最佳答案

问题在于您如何初始化正在读取输入的字节数组。您正在根据 RSA key 的大小而不是输入流的预期大小来设置大小。

byte[] bytesToBeEncoded = new byte[(KEY_SIZE/8)-11];

key 大小为 1024 位,因此 1024/8 -11 = 128 - 11 = 117 字节。这是您可以从流中读取的数据量,不应与您的 RSA key 的大小相关。

您应该将字节数组初始化为您需要读入的数据的最大大小,这将避免异常。例如:

byte[] bytesToBeEncoded = 1024;

将允许最多 1024 个字符的输入字符串。

关于java - 使用 RSA 加密长字符串 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9655920/

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