gpt4 book ai didi

java - 使用 RSA Bouncy CaSTLe 加密/解密无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:52 24 4
gpt4 key购买 nike

我正在尝试使用充气城堡的 RSAEngine 库使用 2048 位长度的 key 进行加密/解密。我能够创建 key ,存储在不同的文件中并从文件中获取,但是当我解密图像时,它会产生一些我不知道的东西,即解密的文件没有正确显示。文件创建正确,我认为问题出在加密和/或解密时的processBlock方法。加密代码如下:

InputStream clearTextFile;
FileOutputStream textFileProcessed=new FileOutputStream(fileName);
//getKey is a method I implemented and works correctly
RSAKeyParameters key=getKey(keyFileName);
RSAEngine rsaEngine=new RSAEngine();
rsaEngine.init(true,key);
clearTextFile=new FileInputStream(nameClearTextFile);
byte[] bytesReaded;
int nBytesReaded;
int inputBlockSize=rsaEngine.getInputBlockSize();
do
{
bytesReaded = new byte[inputBlockSize];
nBytesReaded=clearTextFile.read(bytesReaded);
if(nBytesReaded>-1)
{ //This is for the last block if it's not 256 byte length
if(nBytesReaded<inputBlockSize)
{
byte[] temp=new byte[nBytesReaded];
for(int i=0;i<nBytesReaded;i++)
{
temp[i]=bytesReaded[i];
}
byte[] encryptedText=rsaEngine.processBlock(temp,0,nBytesReaded);
textFileProcessed.write(encryptedText);
}
else
{
byte[] encryptedText=rsaEngine.processBlock(bytesReaded,0,inputBlockSize);
textFileProcessed.write(encryptedText);
}
}
}while(nBytesReaded>-1);
textFileProcessed.flush();
textFileProcessed.close();
textFileProcessed.close();

并解密:

InputStream encryptedTextFile=new FileInputStream(nameOfFile);
OutputStream decryptedTextFile=new FileOutputStream(nameOfFile);
RSAKeyParameters key=getKey(nameKeyFile);
RSAEngine rsaEngine=new RSAEngine();
rsaEngine.init(false,key);
byte[] bytesReaded;
int nBytesReaded;
int inputBlockSize=rsaEngine.getInputBlockSize();
do
{
bytesLeidos = new byte[inputBlockSize];
nBytesReaded=encryptedTextFile.read(bytesReaded);
if(nBytesReaded>-1)
{
byte[] decryptedText=rsaEngine.processBlock(bytesReaded,0,inputBlockSize);
decryptedTextFile.write(decryptedText);
}
}while(nBytesReaded>-1);
decryptedTextFile.flush();
decryptedTextFile.close();
encryptedTextFile.close();

提前致谢

最佳答案

RSAEngine 不添加填充,因此您将丢失数据 block 中的任何前导零。您还需要使用其中一种可用的编码模式。

我建议也使用对称 key 算法,并且只使用 RSA 来加密对称 key 。它会快得多,并且根据您的数据,也会更安全。

问候,

大卫

关于java - 使用 RSA Bouncy CaSTLe 加密/解密无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236419/

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