苦苦于在数据库字段中存储加密信息

rix*_*rix 6 php mysql encryption

我在mysql数据库中存储加密信息存在很大问题,引擎mySam

我加密这样的信息:

function in($plaintext) {
 $cipher = 'rijndael-256';
 $mode = 'cbc';
 $key = 'key';

    $td = mcrypt_module_open($cipher, '', $mode, '');
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    mcrypt_generic_init($td, $key, $iv);
    $crypttext = mcrypt_generic($td, $plaintext);
    mcrypt_generic_deinit($td);
    return $iv.$crypttext;
}
Run Code Online (Sandbox Code Playgroud)

然后将数据存储在blob中.当我来解密信息时,由于存储在数据库中,大约有10%的时间它已被破坏.

我可以验证它是数据库是问题,因为我已经运行脚本来大规模加密和解密数据没有问题.

有任何想法吗?提前致谢...

[编辑解密程序]

function decrypt($crypttext)
{   
 $cipher = 'rijndael-256';
 $mode = 'cbc';
 $key = '$key';

    $plaintext = ''; 
    $td        = mcrypt_module_open($cipher, '', $mode, '');
    $ivsize    = mcrypt_enc_get_iv_size($td);
    $iv        = substr($crypttext, 0, $ivsize);
    $crypttext = substr($crypttext, $ivsize);
    if ($iv)
    {   
        mcrypt_generic_init($td, $key, $iv);
        $plaintext = mdecrypt_generic($td, $crypttext);
    }   
    return $plaintext;
}
Run Code Online (Sandbox Code Playgroud)

sne*_*rch 2

非常怀疑你遇到过 mysql 数据库错误...“损坏”是怎么回事?我们可以看看你的解密例程和测试脚本吗?您遇到的不仅仅是块大小的填充?

填充: crypt 算法通常适用于数据块(使用 128 位的 aes) - 输入(以及输出!)数据将被填充到这个长度,并且您需要存储整个填充的输出字符串 - 以及可能的非- 填充输入,如果您的输入数据是解密后无法确定并自动删除填充的表单。