gpt4 book ai didi

php - json_encode 不适用于加密字符串

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:15 25 4
gpt4 key购买 nike

我遇到了一些麻烦,因为我想加密从表单中获得的一些发布数据,然后将它们以 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);

我什至没有得到 echo 输出。但字符串似乎被加密了,因为我可以回显(很多字符集错误+一些随机字母和数字),如果我在 php skript 中对其进行解码,我也会得到正确的结果。我没有收到任何控制台警告或错误,无论是在 Chrome 还是 Firefox 中。

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

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

edit2:嗯,正如评论中所建议的,我将字符串转换为utf8,但现在它似乎太长了,无法用我的 key 解密...很难,只加密了单词“test”...

我想我必须更深入地挖掘......

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

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

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

最佳答案

well, as adviced in the comments i converted the string to utf8, but now it seems to be too long to be decrypted with my key... Tough o only encrypted the word "test"...

查看更新后的代码会有所帮助。而不是这样做......

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

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

不过,在用 Java 对其进行 json 解码之后,您需要将其压缩回二进制。

或者,您可以稍后进行 base64_encode 和 base64 解码。

我对 utf8 编码的担忧是 PHP 的内部字符串类型不是 utf8。如果是 Java 的话,这似乎会导致问题。

关于php - json_encode 不适用于加密字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24561881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com