json_encode在encryption的string上不起作用

我有一点麻烦,因为我想encryption一些表单数据,然后将它们发送到我的nodejs服务器以json格式放入数据库。

我的问题:我似乎无法发布数据,一旦它被encryption。 我可以发布jsonstring很好,但没有更多:

我的代码:

$rsa->loadKey($keydata); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $encrypted = $rsa->encrypt("test"); $jsonArray = array( 'crypt' => $encrypted ); $jsonArrayEncoded = json_encode($jsonArray); echo $jsonArrayEncoded; $ch = curl_init('https://..........'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonArrayEncoded); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = json_decode(curl_exec($ch), true); curl_close($ch); 

我甚至没有得到回声输出。 但string似乎得到encryption,因为我可以回声(很多charset错误+一些随机的字母和数字),如果我解码在PHP匆匆我得到正确的结果以及。 我没有得到任何控制台警告或错误,无论是在铬,也不是Firefox。

任何我做错了? (很确定有)

e:我使用它作为encryption库: http : //phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc1

编辑2:好,作为build议在我把string转换为UTF8的评论,但现在似乎是太长,不能用我的密钥解密…坚韧o只encryption单词“testing”…

我想我必须深入挖掘…

如果有人知道:对于解密,我使用以下代码的node.js的Ursa模块:

 var buffer = new Buffer(req.body.crypt); var data = private.decrypt(buffer, 'utf8', 'utf8', ursa.RSA_PKCS1_PADDING); 

那么,正如在我把string转换为utf8的评论中所build议的那样,但是现在似乎太长了,不能用我的密钥来解密……坚韧o只encryption了单词“test”…

这将有助于看到你的更新代码,这样做。 代替这样做…

json_encode本身不处理二进制数据。 我的build议是做这样的事情:

 $jsonArray = array( 'crypt' => bin2hex($encrypted) ); $jsonArrayEncoded = json_encode($jsonArray); echo $jsonArrayEncoded; 

你需要把它压缩回二进制,但是,在你用json解码之后。

或者,你可以做base64_encode和base64以后解码。

我对UTF8编码的担心是PHP的内部stringtypes不是utf8。 如果Java是那么可能会导致问题似乎。

json_encoding函数有许多可以传递给它的标志,这使得函数能够parsing特定的字符集。 下面的电话可能会解决您遇到的问题

json_encode($jsonArray, JSON_UNESCAPED_SLASHES | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP );