0
因此,我在C++中使用以下代碼與Openssl。 我從另一個SO線程得到了這個。AES_cfb128_encrypt不解密加密文件中的所有字節
int bytes_read, bytes_written;
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
/* ckey and ivec are the two 128-bits keys necesary to
en- and recrypt your data. Note that ckey can be
192 or 256 bits as well */
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";
/* data structure that contains the key itself */
AES_KEY key;
/* set the encryption key */
AES_set_encrypt_key(ckey, 128, &key);
/* set where on the 128 bit encrypted block to begin encryption*/
int num = 0;
FILE *ifp = fopen("out.txt", "r");
FILE *ofp = fopen("orig.txt", "w");
while (true) {
bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);
AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
AES_DECRYPT); //or AES_DECRYPT
bytes_written = fwrite(outdata, 1, bytes_read, ofp);
if (bytes_read < AES_BLOCK_SIZE) {
std::cout << bytes_read << std::endl;
break;
}
}
fclose(ifp);
fclose(ofp);
什麼我做的是通過傳遞加密文件「的test.txt」 AES_ENCRYPT
到AES_set_encrypt_key
,然後再試圖解密相同的文件。加密文件存儲爲out.txt。
我使用上面的代碼進行解密。我的問題是,解密文件似乎只解密454字節的數據。它正確地解密了數據,但不是全部。我嘗試了一個測試文件< 454字節,它工作正常,但使用8kb文件,14kb文件等總是導致只有454字節被解密。但是,加密文件的大小是正確的(即對於14kb測試文件,大約14kb加密文件)。
使'ivec'爲空字符串可以讓我解密545字節的加密文本。
我在做什麼錯?