我已经使用模式电子代码簿(ecb)的分组密码方法AES-128加密了大小为196,662字节的数据,现在加密数据大小变为196,672字节。现在我必须解密,因为我必须解密的数据大小是16的倍数,我尝试在一段时间内解密加密数据而不分割它,但它没有解密。告诉我,如果我想更改加密和解密方法中的任何内容,或者告诉我任何其他等效的解决方案。提前谢谢。
编辑:加密代码:
bufferlen = filesize;
buffer = new BYTE [ bufferlen ];
feof = false;
do {
count = fread(buffer, 1, 16, filepointer);
if ( count < 16 ) {
feof = true;
}
cout << count;
result = CryptEncrypt(hGenKey,NULL,feof,0,buffer,&count,bufferlen);
if ( result == 0 ) {
cout << "\nencrypt failed";
}
else {
cout << "encrypt passed";
}
if(fwrite(buffer, 1, count , filepointer1)!=count) {
cout << "\nwrite failed";
}
} while (feof != true);
解密代码:
bufferlen = filesize;
buffer = new BYTE [ bufferlen ];
feof = false;
do {
count = fread(buffer, 1, 16, filepointer);
if ( count < 16 ) {
feof = true;
}
cout << count;
result = CryptEncrypt(hGenKey,NULL,feof,0,buffer,&count,bufferlen);
if ( result == 0 ) {
cout << "\nencrypt failed";
}
else {
cout << "encrypt passed";
}
if(fwrite(buffer, 1, count , filepointer1)!=count) {
cout << "\nwrite failed";
}
} while ( feof != true );
答案 0 :(得分:1)
在循环的倒数第二次迭代中,当您进行解密时,count
将为16,但是您必须设置Final
标志,因为它包含填充(您的{{1}是假的)。然后在下一次迭代中,feof
将为0,在这种情况下,您设置count
但实际上没有数据可以解密。
答案 1 :(得分:0)
我会查看有关ecb http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
的维基百科文章如果没有至少拥有项目的伪代码,我们就无法说出其他内容。
答案 2 :(得分:0)
这实际上是对评论的回答,而不是原始问题。在伪代码中,CBC模式看起来像:
prev_block = IV;
write_output(prev_block);
current_block = first_block;
while (more blocks to process) {
encrypted_block = encrypt_block(current_block XOR prev_block);
write_output(encrypted_block);
prev_block = encrypted_block;
current_block = next_block;
}