我正试图保护我的数据库信息和数据的标准类型是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()
前后是不同的。那么我怎样才能确保它在整个加密过程中保持不变,或者在加密完成后修复它呢?
bin2hex写道:
033303539222 c2274797065223a22686f6d65227d00000000000000000000
这意味着在解密的字符串中尾随NUL字节。这是因为mcrybt_cbc
按块操作。它会将输入和输出填充为16(或24)个字节的倍数。(输出有时甚至可能包含垃圾;这就是为什么长度字段经常出现在大多数加密方案/容器格式中。
在您的情况下,您可以在解密后应用rtrim
。或者更确切地说:
json_decode(rtrim(decrypt($key, $locked), " "), true);