mcrypt_decrypt有时不会完全解密

时间:2015-09-30 11:49:52

标签: php encryption mcrypt

我有2台服务器:NAS和外部服务器(让我们称他为邮件服务器)。 NAS应该为员工和客户生成信息,加密消息,然后发送到邮件服务器,消息应该被解密并通过PHP mail()函数发送。我的问题是,每次差分解密都会发出相同的消息:

原文:这是非常重要的数据

解密:

  1. 这非常令人难以置信!'6
  2. hÁMJaÎ,ÁÔăV˘ortantdata
  3. S |ĚĚ'SR0B%0GĆŻ〜ŘĽŁä&安培; 2U
  4. 有时它是正确的'这是非常重要的数据'
  5. 如何解决?

    我的代码:

    用户文件的一部分:

    $td = mcrypt_module_open('twofish', '', 'cbc', '');
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td));
    $key = substr(md5('mylittlepony').sha1('flutershyismylove'), 0, 31);
    mcrypt_generic_init($td, $key, $iv);
    $encrypted = mcrypt_generic($td, 'This is very important data');
    echo message('my@mail.com', 'test', base64_encode($encrypted).'||'.base64_encode($iv));
    

    邮件服务器上的文件:

    $a = explode('||', $_POST[message]);
    $message = base64_decode($a[0]);
    $td = mcrypt_module_open('twofish', '', 'cbc', '');
    $iv = base64_decode($a[1]);
    $key = substr(md5('mylittlepony').sha1('flutershyismylove'), 0, 31);
    mcrypt_generic_init($td, $key, $iv);
    $decrypted = mdecrypt_generic($td, $message);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    $decrypted = trim($decrypted);
    mail($to, $_POST[subject], $decrypted, $_POST[headers]);
    

    message()是通过cURL将信息发送到邮件服务器的功能。

1 个答案:

答案 0 :(得分:1)

我无法重现此问题。 https://3v4l.org/kihc4

可能是因为你没有{{1}你的POST参数中的值并且它破坏了IV和/或密文吗?

我也注意到你不是authenticating your ciphertext。您是否考虑使用defuse/php-encryption而不是滚动自己的加密? (我专业推荐它。)

  

urlencode()

我认为hash_pbkdf2()在这里会更有用吗?