openssl_public_encrypt和JSON

时间:2014-04-11 12:49:48

标签: php json

假设我们需要以加密的方式将一些机密数据存储到数据库中。并且说我们需要它们为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,那就是空的话)似乎都有效。我试图找到有关这种奇怪行为的文档,但我找不到任何东西。

有人知道这个结果背后的原因吗?

修改

即使我删除其他字段(不是空字段)似乎都有效。我说不出话来,因​​为它是一件我无法理解的愚蠢的事情

1 个答案:

答案 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必须超过长度限制......