我有2个函数来加密和解密字符数组(变量称为:buffer),然后将字符保存在文件中,以便以后可以解密,但是我注意到如果我修改了字符数组中的任何字符,加密的文本,mcrypt不会警告任何错误,它只是在文本的一部分中显示不同的疯狂字符,其余的看起来很完美,我想说加密的文本字符串有错误。
那是做到这一点的方法吗?
当文本较小时,这并不明显,但是由于我哈希了168k个字符的文本。
我的变量传递给函数:buffer_len = 32;
我的IV
和key
每个变量都是16位字符的列表。
int encrypt(void* buffer, int buffer_len, char* IV, char* key, int key_len)
{
MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL);
int blocksize = mcrypt_enc_get_block_size(td);
int n_blocks = buffer_len / blocksize;
int i = 0;
if (buffer_len % blocksize != 0)
return 1;
mcrypt_generic_init(td, key, key_len, IV);
for (i = 0; i < n_blocks; i++)
mcrypt_generic(td, ((unsigned char*)buffer) + (i * blocksize), blocksize);
mcrypt_generic_deinit(td);
mcrypt_module_close(td);
return 0;
}
int decrypt(void* buffer, int buffer_len, char* IV, char* key, int key_len){
MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL);
int blocksize = mcrypt_enc_get_block_size(td);
int n_blocks = buffer_len / blocksize;
int i = 0;
if (buffer_len % blocksize != 0)
return 1;
mcrypt_generic_init(td, key, key_len, IV);
for (i = 0; i < n_blocks; i++)
mdecrypt_generic(td, ((unsigned char *)buffer) + (i * blocksize), blocksize);
mcrypt_generic_deinit(td);
mcrypt_module_close(td);
return 0;
}
最佳答案
mcrypt
的最后一个错误修复来自2007年。使用实际上维护的库,并使用HMAC功能添加身份验证标签(该标签还应提供完整性)。不要忘记在计算中包括IV。
关于c - MCrypt可以检查创建的哈希是否被修改了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25833232/