使用 Crypto++/AES CFB 的加密不起作用
Encryption with Crypto++/AES CFB not working
我有一个简单的控制台程序,它应该使用 Crypto++ 库中的 AES CFB 算法加密文件。由于某种原因,它不起作用。编码部分:
byte data[16] = { 0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44 };
byte result[16] = { 0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44 };
//Sample key
byte key[16] = { 0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44 };
//Generate random Initialization Vector
byte iv[16];
CryptoPP::AutoSeededRandomPool rnd;
rnd.GenerateBlock(iv, CryptoPP::AES::BLOCKSIZE /*16*/);
//Through VisualStudio debug/watch functionality I have found out that
//Crypto++ randomizer works properly so at this point "iv" contains random values
CryptoPP::CFB_Mode<CryptoPP::AES>::Encryption tmp(key, 16, iv, 1);
tmp.ProcessData(data, result, 16);
问题是,当此代码完成时,result
应该填充密文,但它仍然填充 px88
和 0x44
。
我是由这个官方教程指导的:https://www.cryptopp.com/wiki/Advanced_Encryption_Standard
ProcessData
是outstring
,然后是instring
然后是长度。您已切换输入和输出参数 data
& result
(大多数 API 会将输出参数放在其方法声明的最后,因此这可以解释错误)。
我有一个简单的控制台程序,它应该使用 Crypto++ 库中的 AES CFB 算法加密文件。由于某种原因,它不起作用。编码部分:
byte data[16] = { 0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44 };
byte result[16] = { 0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44 };
//Sample key
byte key[16] = { 0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44,
0x88, 0x44, 0x88, 0x44 };
//Generate random Initialization Vector
byte iv[16];
CryptoPP::AutoSeededRandomPool rnd;
rnd.GenerateBlock(iv, CryptoPP::AES::BLOCKSIZE /*16*/);
//Through VisualStudio debug/watch functionality I have found out that
//Crypto++ randomizer works properly so at this point "iv" contains random values
CryptoPP::CFB_Mode<CryptoPP::AES>::Encryption tmp(key, 16, iv, 1);
tmp.ProcessData(data, result, 16);
问题是,当此代码完成时,result
应该填充密文,但它仍然填充 px88
和 0x44
。
我是由这个官方教程指导的:https://www.cryptopp.com/wiki/Advanced_Encryption_Standard
ProcessData
是outstring
,然后是instring
然后是长度。您已切换输入和输出参数 data
& result
(大多数 API 会将输出参数放在其方法声明的最后,因此这可以解释错误)。