我試圖使用RSAngine庫在彈性城堡中使用2048位長度密鑰進行加密/解密。我能夠創建密鑰,存儲在不同的文件中並從文件中獲取,但是當我解密圖像時,會產生一些我不知道解密文件無法正確顯示的情況。文件創建正確,我認爲這個問題是在processBlock方法,同時加密和/或decrypting.The代碼如下加密:使用RSA Bouncy Castle加密/解密無法正常工作
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();
感謝
請簡化代碼刪除所有文件讀/寫。這將有助於隔離問題是加密還是IO工作。嘗試創建一個[SSCCE](http://sscce.org/) - 這對我們很有幫助,它是解決您自己問題的好方法。 – 2013-03-06 08:01:52
問題是我認爲錯誤在於加密或解密,錯誤可能在於保存文件中的字節或從那裏讀取。我不知道它是這種方式,但它可能會保存有關數據,這是真正的問題 – Javier 2013-03-06 11:06:06
我建議簡化的原因是要找出問題所在。刪除IO操作,您將確定您的密碼學是否有問題。如果不是,那麼這可能是IO操作。這是一個基本的調試原理。 – 2013-03-06 14:59:11