【问题标题】:Struggling to store encrypted info in database field努力在数据库字段中存储加密信息
【发布时间】:2012-05-24 06:52:46
【问题描述】:

我在 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;
}

然后将数据存储在一个 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;
}

【问题讨论】:

    标签: php mysql encryption


    【解决方案1】:

    高度怀疑你遇到了一个mysql数据库错误......“损坏”怎么办?我们可以看看你的解密程序和测试脚本吗?您遇到的不仅仅是块大小的填充?

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

    【讨论】:

    • 我也怀疑这是一个错误。损坏的意思是当我查看已解密的字段时,它们只是一串无意义的字符。您能详细说明块大小的填充请求吗?
    • 我们需要查看您的解密例程,以及有关如何将数据存储在数据库中的更多信息 - 一个完整的复制脚本会很好。
    【解决方案2】:

    在 MySQL 中保护明文密码不是一个好主意...还有为什么不使用 SHA1 或 MD5 哈希...您将获得更简洁的响应,然后根据需要更改算法。

    基本上

    SELECT SHA1("SecretPassword") will = 08cd923367890009657eab812753379bdb321eeb 或 blabityboo

    SHA1 将存储 40 个字符,这意味着您可能应该将数据类型从 BLOB 更改为 varchar 或 nvarchar()

    如果不构建您的算法,我们无法判断该字段将持续多长时间,因此关于填充的评论。

    当您使用 SELECT CHARACTER_LENGTH("SecretPassword") 选择通行证时,您将获得加密字段的长度。然后您可以创建适当的约束。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 2018-10-15
      • 1970-01-01
      • 2012-07-18
      • 2010-12-05
      • 2013-11-28
      • 1970-01-01
      • 2015-01-20
      • 2015-10-08
      相关资源
      最近更新 更多