在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模块等等。
求解···
把C#解密代码贴出来下。
你好~C#代码我这边没有办法拿到···= =!
@孤独的猫咪神: 这不太好分析呢~
@幻天芒: 是啊,现在也只能通过错误提示来进行分析。弄了半天觉得是编码转换的问题,但是又不知道错在哪···好难搞···
@孤独的猫咪神: 建议在node中使用utf8来解码。
@幻天芒: 我也进行过这方面的尝试和修改,现在的编码就是在utf8下进行的。https://github.com/rzcoder/node-rsa#encryptingdecrypting 在它的说明中,默认编码就是utf8。
@孤独的猫咪神: 关键还是要知道两边的算法,这样才好调试
@幻天芒: 虽然暂时还没解决,仍然灰常感谢你的帮助和建议~~~
@孤独的猫咪神: 没有C#的代码的话,你就让对方给你一组公钥和私钥,以及一个原文和密文,把这几个数据全部用node来实现以下加解密。如果成功的话,那算法的差异就可以抹平了~
@幻天芒: 好想法~我沟通看看~
@孤独的猫咪神: Good luck.
我也准备接触node.js呢,要说基础,php要知道一些。你说我是继续学习php,还是学习node.js呢,你为什么学习php?
。。。我没有学习php。。。:)
将
var key = new NodeRSA(); 6 key.importKey(pubkey, 'pkcs8-public-pem');
改为
var key = new NodeRSA(pubkey);
试试
刚刚试过,仍然不行。仍然提示“不正确的数据。”。
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();