我有2台服务器:NAS和外部服务器(让我们称他为邮件服务器)。 NAS应该为员工和客户生成信息,加密消息,然后发送到邮件服务器,消息应该被解密并通过PHP mail()函数发送。我的问题是,每次差分解密都会发出相同的消息:
原文:这是非常重要的数据
解密:
如何解决?
我的代码:
用户文件的一部分:
$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将信息发送到邮件服务器的功能。
答案 0 :(得分:1)
我无法重现此问题。 https://3v4l.org/kihc4
可能是因为你没有{{1}你的POST参数中的值并且它破坏了IV和/或密文吗?
我也注意到你不是authenticating your ciphertext。您是否考虑使用defuse/php-encryption而不是滚动自己的加密? (我专业推荐它。)
urlencode()
我认为hash_pbkdf2()
在这里会更有用吗?