我有2个函数来加密和解密字符数组(变量称为: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;
}

最佳答案

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

关于c - MCrypt可以检查创建的哈希是否被修改了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25833232/

10-12 16:05