我想加密电子邮件以便稍后解密。
那时我不关心安全,我只是想让它起作用。邮件存储在$umail
研究 stackoverflow 我找到了以下适用的代码:
$keyword = "Key";
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
$activation = base64_encode($iv.mcrypt_encrypt(MCRYPT_RIJNDAEL_128, hash('sha256', $keyword, true), $umail, MCRYPT_MODE_CBC, $iv));
$activation = rawurlencode($activation);
$ activation是加密邮件。
我将加密邮件($ activation)作为URL的一部分。
$key = $_GET['key'];
$key = rawurldecode($key);
$keyword = "Key";
$requestMail = base64_decode($key);
$ivDec = substr($requestMail, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, hash('sha256', $keyword, true), substr($requestMail, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)), MCRYPT_MODE_CBC, $ivDec), "\0");
有时会显示我输入的电子邮件。其他时候,使用相同的电子邮件输入,当加密的单词具有" +"时,它会显示奇怪的符号。
有什么建议吗?
它已经解决了。这是我需要的帖子:
PHP - Plus sign with GET query
我注意到当生成+时,解密被破坏了。在该帖子中解释了+是一个PHP保留字,因此它必须转换为%2B,然后重新转换为+。为此,您可以使用:rawurlencode,rawurldecode。
代码已更新。
享受!