【发布时间】:2014-07-04 23:05:16
【问题描述】:
我遇到了一些麻烦,因为我想加密从表单中获取的一些帖子数据,然后以 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:我将其用作加密库:http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc1
edit2:好吧,按照 cmets 中的建议,我将字符串转换为 utf8,但现在用我的密钥解密似乎太长了...艰难 o 只加密了“test”这个词...
我想我必须深入挖掘......
如果有人知道:为了解密,我正在使用带有以下代码的 node.js 的 Ursa 模块:
var buffer = new Buffer(req.body.crypt);
var data = private.decrypt(buffer, 'utf8', 'utf8', ursa.RSA_PKCS1_PADDING);
【问题讨论】:
-
可能是字符集问题,您是否尝试在加密和 json'ing 之间应用
utf8_encode()? -
因为我不知道那个功能没有......但它确实有效,有点......
-
“太长无法解密”是什么意思?显然你会在解密之前解码 - 所以对于加密过程,编码根本不应该有任何区别
-
是的,当我尝试用 ursa 对其进行解码时,我仍然得到一个“比 modlen 更长”的错误......我为两者选择了相同的填充方法,所以我认为还有另一个问题,进入我明天去看看。
标签: php json node.js encryption phpseclib