当我尝试更改加密文本时,PHP mcrypt_decrypt将返回垃圾数据

时间:2014-12-15 14:25:49

标签: php encryption

如何检测变量是否包含垃圾?

我有mcrypt_encrypt()生成的加密文字。我试图编辑这个(假设有人会改变加密文本)。我希望在解密后返回一个空值而不是"Ú0úà¡ßQ9õ÷rŒi¾¼v’Ó}çTc~Žk"

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您正在寻找一种加密数据的方式,以便能够检测是否有人篡改了数据。

实现此目标的最简单方法是在加密数据之前将校验和合并到数据中。

例如,您可以按如下方式加密数据:

$plaintext = "Lorem ipsum dolor sit amet";
$hash = md5($plaintext);
$output = base64_encode(mcrypt_encrypt(CIPHER, KEY, $hash.$plaintext, MODE));

然后解密过程如下所示:

$input = mcrypt_decrypt(CIPHER, KEY, base64_decode($output, MODE));
$hash = substr($input, 0, 32);
$text = substr($input, 32);
if (md5($text) != $hash) {
   die("Invalid data");
}
/* If you get this far, the encrypted data is fine */
  :
echo $text;
  :