我有一个运行mysql和php的web服务器,将数据发送到json字符串。
我有第二个web服务器读取数据,然后显示它。
目前一切正常。
我需要将一些敏感数据添加到字符串中,所以我想知道使用php加密/解密json的最佳方法是什么?
有人可以帮忙吗?
我一直喜欢MCRYPT
//Key
$key = 'SuperSecretKey';
//To Encrypt:
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, 'I want to encrypt this', MCRYPT_MODE_ECB);
//To Decrypt:
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_ECB);
如果这是你正在寻找的内容。它会将JSON视为字符串,然后在解密后进行json_decode()
或其他您正在执行的操作。这取决于数据的敏感程度。根据我的经验,简单的php加密通常可以解决问题。我通常会在将json数据字段编码为json字符串之前加密其中的敏感字段。
这是加密部分的代码:
$key = '密码(加/解)密'; $string = '要加密的字符串'; //注意空格
加密:
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
解密:
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
然而,你应该始终对密码进行哈希处理(使用MD5、SHA1等算法),最好加一些盐。
在服务器上存储私钥并使用DES加密;这是一个双向算法。
编辑:
根据评论,看来我误解了问题。我的假设是OP想要像在电子邮件中发送加密数据一样在互联网上发送加密数据,然后在以后的某个时间获得数据并能够解密它。将来在提交答案之前,我会通过评论进行澄清。
当然,在网络上安全地传输数据需要 SSL(HTTPS)。
但是,即使如此,在发送 JSON 数据之前加密它们仍然有其必要性。
我曾经遇到过一个加密 JSON 数据的问题。这是由于 JSON 数据中的 "\t" 导致的。 在加密之前,您需要将其删除。否则,当您想将其解密回适当的 JSON 格式时,会出现问题。
$plain_txt = str_replace("\r",'', $plain_txt);
$plain_txt = str_replace("\n",'', $plain_txt);
$plain_txt = str_replace("\t",'', $plain_txt);
请参考以下工作示例: https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba