假设我们需要以加密的方式将一些机密数据存储到数据库中。并且说我们需要它们为json
格式,因为它更适合数据重建。
我想念的东西让我发疯。
以json为例
$json = {"customer":{"customer_address":"Fake address 123","customer_city":"Fake City","customer_company":"","customer_countrycode":"it","customer_email":"","customer_telephone":"+39.347.xxxxxxx","customer_zip":"yyyyy"},"currency_code":"EUR","commision_amount":"84"}
现在我想加密这个json
,我会做以下
$pubKey = openssl_pkey_get_public($puk);
openssl_public_encrypt($json, $json_crypted, $pubKey);
如果我echo $json_crypted
它没有显示任何内容,但是如果我删除了一些字段(例如customer_company
,那就是空的话)似乎都有效。我试图找到有关这种奇怪行为的文档,但我找不到任何东西。
有人知道这个结果背后的原因吗?
即使我删除其他字段(不是空字段)似乎都有效。我说不出话来,因为它是一件我无法理解的愚蠢的事情
答案 0 :(得分:3)
来自文档中的评论:
http://www.php.net/manual/en/function.openssl-public-encrypt.php#95307
openssl_private_encrypt()具有数据长度的下限 它可以加密,因为算法的性质。
要加密较大的数据,您可以随机使用openssl_encrypt() 密码(如sha1(microtime(true))),并使用加密密码 openssl_public_encrypt()。这样可以用a加密数据 公钥和私钥解密。
你的json必须超过长度限制......