【发布时间】:2011-09-02 01:52:45
【问题描述】:
我正在尝试保护我的数据库中的信息,标准的数据类型是 JSON,我刚刚编写了一些简单的 mcrypt 函数来加密和解密任何文本,它们是:
function encrypt($key, $data){
$encrypted_data = mcrypt_cbc(MCRYPT_RIJNDAEL_192, $key, $data, MCRYPT_ENCRYPT);
return base64_encode($encrypted_data);
}
function decrypt($key, $encryptedData){
$decrypt = mcrypt_cbc(MCRYPT_RIJNDAEL_192, $key, base64_decode($encryptedData), MCRYPT_DECRYPT);
return $decrypt;
}
我有一个有效的 JSON 字符串,并且我已经测试了 json_decode 而没有通过加密,它可以工作。但是当我加密然后解密它然后尝试json_decode它只返回NULL。
现在我只是在一个简单的脚本中调试它:
include("coreFunctions.php");
$arr = '{"number":"4646464646","type":"home"}';
$key = "ladida";
$locked = encrypt($key, $arr);
var_dump($locked);
var_dump(json_decode(decrypt($key, $locked), true));
我已经验证了decrypt 的输出与输入时的相同。
谁能告诉我为什么会这样?
更新
我发现之前和之后的strlen() 是不同的。那么我如何才能确保它在整个加密过程中保持不变或在完成后修复它呢?
【问题讨论】:
-
如果
decrypt的输出相同,则不会发生这种情况。检查字符串长度...解密输出可能会用 ASCII 空字符填充。 -
向我们展示解码后字符串的
bin2hex()转储。 -
这些加密函数是垃圾。你的随机静脉注射在哪里?
-
bin2hex读取:7b226e756d626572223a2237383635333033303539222c2274797065223a22686f6d65227d0000000000000000000000 -
@Rook 我真的很想知道
random iv是什么,你有关于这个主题的一些文献吗?
标签: php security encryption json