首页 新闻 会员 周边

nodejs 通过rsa方法加密,C#端解密出现“CryptographicException: 不正确的数据。”

0
悬赏园豆:120 [已解决问题] 解决于 2016-02-10 01:38

在nodejs中,使用node-rsa组件进行加密:

1 var NodeRSA = require('node-rsa');
2 var fs = require('fs');
3 
4 var pubkey = fs.readFileSync('./app/publickey.pub');
5 var key = new NodeRSA();
6 key.importKey(pubkey, 'pkcs8-public-pem');
7 var usernameResult = (key.encrypt(userName)).toString('base64');
8 var passwordResult = (key.encrypt(password)).toString('base64');

但在发送到服务器后,服务器返回

我已经尝试了各种转base64的方法了,都不行,比如自带的方法:

1 key.encrypt(userName, 'base64');

比如使用encoding模块等等。

求解···

孤独的猫咪神的主页 孤独的猫咪神 | 初学一级 | 园豆:115
提问于:2016-01-15 14:56
< >
分享
最佳答案
0

更换了加密模块为https://github.com/travist/jsencrypt

感谢各位的帮助~

孤独的猫咪神 | 初学一级 |园豆:115 | 2016-02-10 01:37
其他回答(3)
0

把C#解密代码贴出来下。

收获园豆:80
幻天芒 | 园豆:37175 (高人七级) | 2016-01-15 21:29

你好~C#代码我这边没有办法拿到···= =!

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-16 23:08

@孤独的猫咪神: 这不太好分析呢~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-01-17 09:56

@幻天芒: 是啊,现在也只能通过错误提示来进行分析。弄了半天觉得是编码转换的问题,但是又不知道错在哪···好难搞···

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-17 14:12

@孤独的猫咪神: 建议在node中使用utf8来解码。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-01-17 22:31

@幻天芒: 我也进行过这方面的尝试和修改,现在的编码就是在utf8下进行的。https://github.com/rzcoder/node-rsa#encryptingdecrypting 在它的说明中,默认编码就是utf8。

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-17 23:06

@孤独的猫咪神: 关键还是要知道两边的算法,这样才好调试

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-01-18 12:24

@幻天芒: 虽然暂时还没解决,仍然灰常感谢你的帮助和建议~~~

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-19 22:37

@孤独的猫咪神: 没有C#的代码的话,你就让对方给你一组公钥和私钥,以及一个原文和密文,把这几个数据全部用node来实现以下加解密。如果成功的话,那算法的差异就可以抹平了~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-01-20 08:44

@幻天芒: 好想法~我沟通看看~

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-20 14:12

@孤独的猫咪神: Good luck.

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-01-20 17:19
0

我也准备接触node.js呢,要说基础,php要知道一些。你说我是继续学习php,还是学习node.js呢,你为什么学习php?

[0] | 园豆:1257 (小虾三级) | 2016-01-16 18:57

。。。我没有学习php。。。:)

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-16 23:09
0

var key = new NodeRSA();
6 key.importKey(pubkey, 'pkcs8-public-pem');

改为

var key = new NodeRSA(pubkey);

试试

收获园豆:40
dudu | 园豆:30994 (高人七级) | 2016-01-19 16:49

刚刚试过,仍然不行。仍然提示“不正确的数据。”。

 1 var pubkey = fs.readFileSync('./app/publickey.pub');
 2     var key = new NodeRSA(pubkey);    
 3     // var key = new NodeRSA(pubkey, 'pkcs8-public-pem', 'import');
 4     // key.importKey(pubkey, 'pkcs8-public-pem');
 5     var usernameResult = (key.encrypt(userName)).toString('base64');
 6     var passwordResult = (key.encrypt(password)).toString('base64');
 7     
 8     console.log('usernameResult: ' + usernameResult);
 9     var post_data = {
10         grant_type: 'password',
11         username: usernameResult,
12         password: passwordResult
13         };
14     var content = qs.stringify(post_data);
15     var options = {
16         hostname: 'api.cnblogs.com',
17         port: 80,
18         path: '/token',
19         method: 'POST',
20         headers: {
21             'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
22             'Authorization': 'Basic THIS-IS-CANNOT-PUBLIC-STRING'
23         }
24     };
25     var req = http.request(options, function (res) {
26         var str = '';
27         res.setEncoding('utf8');
28         res.on('data', function (chunk) {
29             str += chunk;
30         });
31         res.on('end', function(){
32             __ACCESS_TOKEN = JSON.parse(str).access_token;
33             __IS_USER_TOKEN = true;
34             callbackSuccess(__ACCESS_TOKEN);
35         });
36     });
37     req.on('error', function (e) {
38         callBackError(e.message);
39     });
40     req.write(content);
41     req.end();

 

支持(0) 反对(0) 孤独的猫咪神 | 园豆:115 (初学一级) | 2016-01-19 22:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册