【发布时间】:2011-06-10 14:46:32
【问题描述】:
您好,我已经使用模式电子密码本 (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 );
【问题讨论】:
-
我想向我们展示您的算法可能会更容易评论更改
-
加密:bufferlen = 文件大小;缓冲区 = 新字节 [ bufferlen ]; feof = 假; do { count = fread(buffer, 1, 16, filepointer); if (count
-
你必须使用CryptDecrypt来解密。
-
ECB 模式通常是个坏主意——除非你知道你永远不会对同一个块进行多次加密。
-
@Monish:这取决于,但如果你不知道这样做的理由,我一般会认为 CBC 是一个合理的默认值,而 CFB 是一个漂亮的关闭第二选择。
标签: c++ cryptography