Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_encode不适用于加密字符串_Php_Json_Node.js_Encryption_Phpseclib - Fatal编程技术网

Php json_encode不适用于加密字符串

Php json_encode不适用于加密字符串,php,json,node.js,encryption,phpseclib,Php,Json,Node.js,Encryption,Phpseclib,我遇到了一点麻烦,因为我想对从表单中获取的一些post数据进行加密,然后将它们以json格式发送到我的nodejs服务器,将它们放入数据库中 我的问题是:一旦数据被加密,我似乎无法发布数据。我可以很好地发布json字符串,但没有更多内容: 我的代码: $rsa->loadKey($keydata); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $encrypted = $rsa->encrypt("test");

我遇到了一点麻烦,因为我想对从表单中获取的一些post数据进行加密,然后将它们以json格式发送到我的nodejs服务器,将它们放入数据库中

我的问题是:一旦数据被加密,我似乎无法发布数据。我可以很好地发布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:我用这个作为加密库:

edit2:嗯,正如我在评论中提到的,我将字符串转换为utf8,但现在它似乎太长,无法用我的密钥解密。。。硬汉o只加密了“测试”一词

我想我得更深入地挖掘

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

var buffer = new Buffer(req.body.crypt);

var data = private.decrypt(buffer, 'utf8', 'utf8', ursa.RSA_PKCS1_PADDING);

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

json_encode($jsonArray,json_unscaped_SLASHES | json_HEX | json_HEX | APOS | json_HEX | json_HEX | AMP)

正如我在评论中提到的,我将字符串转换为utf8,但是 现在用我的密钥解密似乎太长了。。。硬汉 只加密了“测试”一词

这将有助于查看更新后的代码。而不是那样做

json_encode不以本机方式处理二进制数据。我的建议是这样做:

$jsonArray = array(
    'crypt' => bin2hex($encrypted)
);
$jsonArrayEncoded = json_encode($jsonArray);
echo $jsonArrayEncoded;
不过,在用Java对其进行json解码后,需要将其压缩回二进制

或者,您可以稍后对其进行base64_编码和base64解码


我对utf8编码的担心是PHP的内部字符串类型不是utf8。如果Java是,那么这可能会导致问题。

可能是字符集问题,您是否尝试在加密和json'ing之间应用?因为我不知道函数no。。。但它起了作用,有点……你说的“太长而无法解密”是什么意思?很明显,在解密之前你会先解码-所以对于加密过程,编码应该不会有任何区别。是的,当我尝试用ursa解码时,仍然会出现“比modlen更长”的错误。。。我为这两种方法选择了相同的填充方法,因此我认为还有一个问题,我将在明天研究。对不起,所有这些都没有帮助:(正如上面所评论的,将字符串转换为utf8是可行的。好吧。不管怎样,这是值得知道的。祝你的项目好运,稍后会尝试。我现在的代码没有太大变化,我只是在json_encode()之前添加了一个utf8_encode(),不过我也可以稍后发布。