解密分组密码?

时间:2011-06-10 14:46:32

标签: c++ cryptography

我已经使用模式电子代码簿(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 );

3 个答案:

答案 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;
}