我有两个函数来加密和解密一个字符数组(变量名为: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;
}
答案 0 :(得分:0)
mcrypt
的最后一个错误修复是从2007年开始。使用实际维护的库并使用HMAC功能添加身份验证标记(还应提供完整性)。不要忘记在计算中包括IV。