node.js - RSA算法使用公钥加密,前端和后端得到的密文不一致
怪我咯
怪我咯 2017-04-17 13:44:21
0
3
1573

1.鄙人在做一个安全登录的实验时,接触到jQuery插件jCryption,版本为3.1.0。密钥对以pem文件格式存放在服务器,客户端请求公钥,则读取公钥文件返回给客户端。客户端用公钥加密之后将信息交给服务器,但是服务器一直解密错误(node.js用的类库为node-rsa)

2.后来仔细检查发现前端加密得到的密文与后端得到的密文不一致
如图:
这是前端打印的公钥
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0hFaQcFU481wyhy5JXOv/cgOp
2xQXISjc31cfPk/Ba33j2DayrRr0lWapqIBUPPVECV4wz/S1Gq4NIPDJzIpwSkGG
+XCDccJmtbyd7UhWlqphm8Lsc4AKa28Y7pcxWs6t78fxHHBb06+N7PlNhdWu8sPj
ZLdoCxdIS9WWYuB1EQIDAQAB
-----END PUBLIC KEY-----

这是前端加密的数据
9e5040bed296c4810aa8f8f96b00b9370e3ca171c66942c358441d56d29125bf
这是前端得到的密文
jlKIiz3cW2ethkQauow89QcRnKaac8+r4dwdvYYAIqbbQlSz0bJV7WTx69Xvu/fZ8p9yolg94Lb56nfqwX0yyx4E7at+6YwHL1HxEAiM+zqL+U9gZZGZ04KmH/zScdFHdtnQixe2FwtPa6TFDK5XgUM7C7rsNrvToIipPRp+1qI=

而后端从pem文件中读取公钥加密同样的数据,得到的密文是:
FZRzdEbMeaJruhJWYT1dxNZ+Ho7QVxcic/XGQcqfgwZuQdhKqyxPQskg/ddbti52TztV21AH9MuQBDk7vVpfD/3N2ZsqCib0s0XGfPkN8LYoJ4l4lx9JigGYjLtRk34WxV7AZPVsJ1r9TCwYYitQCHQAT6PW5+O6rpPlVsYQ2yY=

以如下形式使用私钥:

得到的密文也不相同.

将上图中的私钥部分的换行符全部去掉得到的密文任然不相同。

我想问的是jCryption这个插件将字符串设置为公钥的时候怎么操作的,怎样才能使得前端和后端加密得到的密文一致,可以互相加解密呢?

请各位大神指教,困扰好几天了,不胜感谢。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(3)
洪涛

雖然幫不上你這個jCryption,我們當時開發是從網路上找了一個librsa,大概註解是

// Copyright (c) 2005  Tom Wu
// All Rights Reserved.
// See "LICENSE" for details.

// Basic JavaScript BN library - subset useful for RSA encryption.

// Bits per digit

然後回有JSEncrypt的匯出

這個東西當時和php,java,ios接頭全沒問題,用的時候直接給定公鑰和要加密字串,也不需要給模這些參數

黄舟

我自己來回答吧

在node-rsa模組中加解密預設使用 pkcs1_oaep ,而在js中加密解密預設使用的是 pkcs1,在node-rsa中提供了函數可以修改這個選項

var rsakey = new NodeRSA();
rsakey.setOptions({encryptionScheme: 'pkcs1'});//就是增加这一行代码。

參考:http://stackoverflow.com/questions/33837617/node-rsa-errors-when-trying-to-decrypt-message-with-private-key

大家讲道理

如果確保你的明文一樣,公鑰也是一致的,那可能原因是你前後端加密時候的padding方式不一樣。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板