Json_encode对加密字符串不起作用


json_encode does not work on encrypted string

我遇到了一点麻烦,因为我想加密一些帖子数据,我从一个表单,然后将它们发送到我的nodejs服务器json格式将它们放入数据库。

我的问题:我似乎无法发布数据一旦它被加密。我可以张贴json字符串很好,但不是更多的:

我代码:

$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);

我甚至没有得到回声输出。但是字符串似乎被加密了,因为我可以回声(很多字符集错误+一些随机字母和数字),如果我在php脚本中解码,我也会得到正确的结果。我没有得到任何控制台警告或错误,在chrome和firefox中都没有。

我做错什么了吗?(肯定有)

e:我使用这个作为加密库:http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc1

edit2:嗯,正如评论中建议的那样,我将字符串转换为utf8,但现在它似乎太长了,无法用我的密钥解密…硬汉只加密了单词"test"…

我想我必须深入挖掘…

如果有人知道:解密我使用熊座模块的node.js与以下代码:

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

好吧,根据注释中的建议,我将字符串转换为utf8,但是现在它似乎太长了,无法用我的密钥解密…艰难的啊只加密单词"test"…

这将有助于看到你的更新代码,做到这一点。

json_encode不原生处理二进制数据。我的建议是这样做:

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

在Java中进行json解码后,您需要将其压缩回二进制。

或者,您可以稍后执行base64_encode和base64 decode。

我对utf8编码的担忧是PHP的内部字符串类型不是utf8。

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

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