MCrypt可以检查创建的哈希是否被修改?

时间:2014-09-14 12:30:46

标签: c encryption mcrypt

我有两个函数来加密和解密一个字符数组(变量名为:buffer),然后我将字符保存在一个文件中,所以我可以稍后解密它,但我注意到如果我修改了任何一个加密文本中的字符,mcrypt没有警告任何错误,它只是在一段文本中显示不同的疯狂字符,其余看起来很完美,我希望它说加密的文本字符串有错误。

这是一种方法吗?

当文本较小时,这是不明显的,但是因为我散列了168k字符的文本。

我的变量传递给函数:buffer_len = 32;我的IVkey每个都是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;
}

1 个答案:

答案 0 :(得分:0)

mcrypt的最后一个错误修复是从2007年开始。使用实际维护的库并使用HMAC功能添加身份验证标记(还应提供完整性)。不要忘记在计算中包括IV。