2016-04-10 50 views
0

我想加密输入流中的数据并写入它们,我不确定这是否是正确的方式?加密des ecb中的数据

例如,我不知道这行:in_encrypt.read((char *)pt, BLOCK_SIZE);如果我读到达之前EOF它可能会比8较短的最后时间等failbit置位,但我将加密长度的数据8.

是否有可能获得我从流中实际读取的数据长度?如果是这样,我就可以加密正好那个长度的数据BLOCK_SIZE = 8?

EVP_CIPHER_CTX ctx; 
EVP_EncryptInit(&ctx, EVP_des_ecb(), key, NULL); 

while(!in_encrypt.eof()) 
{ 
    in_encrypt.read((char *)pt, BLOCK_SIZE); 
    EVP_EncryptUpdate(&ctx, ct, &tmpLength, pt, BLOCK_SIZE); 
    out_encrypt.write((char *)ct, tmpLength); 
} 

EVP_EncryptFinal(&ctx, ct, &tmpLength); 
out_encrypt.write((char *)ct, tmpLength); 
+0

ECB模式仅提供机密性,它仅适用于一个数据块(不是像任意大小的文件那样的多个块),并且您必须添加一个MAC才能安全地使用ECB模式。您应该使用经过身份验证的加密,因为它提供了*机密性和真实性。请参阅OpenSSL wiki上的[EVP Authenticated Encryption and Decryption](http://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption)。 – jww

+0

我知道这在实践中是不可用的,它只是一个学校工作 – lllook

回答

1

this页面,请致电in_encrypt.gcount()

+0

好吧,生病需要一些眼镜 – lllook