我剛開始研究cryptopp庫。我有一個圖像緩衝區,我想用一些密鑰加密,然後解密但面臨問題,解密和原始圖像不一樣。 我不知道加密或不加密的天氣問題,有人可以幫我解決這個問題。使用解密後的圖像與原始圖像不一樣
Qt Creator的
代碼:
AutoSeededRandomPool prng;
SecByteBlock key(AES::DEFAULT_KEYLENGTH);
prng.GenerateBlock(key, key.size());
byte ctr[ AES::BLOCKSIZE ];
prng.GenerateBlock(ctr, sizeof(ctr));
string cipher, encoded, recovered;
QFile file("original.png");
if(!file.open(QIODevice::ReadOnly)){
cout << "could not open the file"<< endl;
}
QByteArray buffer = file.readAll();
qDebug()<<"buffer length"<<buffer.length();
file.close();
try
{
CTR_Mode<AES>::Encryption e;
e.SetKeyWithIV((byte*)key.data(), key.size(), ctr);
StringSource ss1(buffer, true,
new StreamTransformationFilter(e,
new StringSink(cipher)
)
);
}
catch(CryptoPP::Exception& e)
{
cerr << e.what() << endl;
exit(1);
}
qDebug()<<"cipher length "<<cipher.length();
try
{
CTR_Mode<AES>::Decryption d;
d.SetKeyWithIV((byte*)key.data(), key.size(), ctr);
StringSource ss3(cipher, true,
new StreamTransformationFilter(d,
new StringSink(recovered)
)
);
}
catch(CryptoPP::Exception& e)
{
cerr << e.what() << endl;
exit(1);
}
qDebug()<<"recovered length "<<recovered.length();
QFile ouput("recovered.png");
if(ouput.open(QIODevice::WriteOnly)){
ouput.write(recovered.data(), recovered.size());
ouput.close();
}
響應:
buffer length 538770
cipher length 8
recovered length 8
爲什麼我的密碼長度只有8。
***'字符串鍵= 「7D9BB722DA2DC8674E08C3D44AAE976F」;'*** - 你可能需要一個二進制串;不是一個ASCII字符串。對於Crypto ++,請參閱Crypto ++ wiki上的[HexDecoder](https://www.cryptopp.com/wiki/HexDecoder)。我不確定QT提供的服務。 – jww