NODEJS和飞秋通讯,RSA、blowfish消息加密解密

来源:互联网 发布:c语言高级编程 pdf 编辑:程序博客网 时间:2024/04/27 18:20

Wireshark抓包后发现飞秋的消息都加密了。

看抓到的包,怀疑是RSA公钥(e,n)

下载安装nodejs,然后用 npm安装nodejs的模块node-rsa

修改node-rsa,修改NodeRSA.js

修改:

var DEFAULT_ENCRYPTION_SCHEME = 'pkcs1';var DEFAULT_SIGNING_SCHEME = 'pkcs1';

增加:

NodeRSA.prototype.setPublicKey = function (bits, exp) {        this.keyPair.setPublic(bits, exp);};NodeRSA.prototype.getPublicKey = function () {        return this.keyPair.getPublic();};

修改rsa.js

    RSAKey.prototype.getPublic = function () {var tn=this.n.toBuffer();var rn;if (tn.length==128) rn=tn;else{rn=new Buffer(128);tn.copy(rn,0,1,129);}return {'n':rn,'e':this.e};    };


nodejs与飞秋通讯的主程序testfeiq.js:

var mycrypto = require('crypto'),NodeRSA = require('node-rsa'),dgram = require("dgram");var host='192.168.1.100',port = 2425;var server = dgram.createSocket("udp4");var Protocol={'0':'Login','119':'Online','120':'rOnline','121':'rOver','6291457':'NameGroup','6291459':'rNameGroup','114':'reqRsa','115':'ansRsa','4194592':'recvMsg','33':'Roger'};var ipmsghead=['1_lbt4_3#128#F8BA3C80EC9A#0#0#0','','Administrator','mypc',''];var msglist=[];var pubkeylist={};var myRsaKey = new NodeRSA({b:1024});var hostpubkey=new NodeRSA();server.on("error", function (err) {console.log(err);server.close();});server.on("message", function (msg, rinfo) {var m=msg.toString().split(":"),xMsg=m[4];if (Protocol.hasOwnProperty(xMsg)&&rinfo.address!=host) {console.log(rinfo.address+': '+xMsg);eval(Protocol[xMsg]+'(m,rinfo)');}});server.on("listening", function () {server.setBroadcast(true);server.setMulticastLoopback(true);sendpacket('0:','255.255.255.255');sendpacket('6291457:Alice\0Group','255.255.255.255');});server.bind(port);function sendpacket(msg,address) {ipmsghead[1]=Math.floor(Date.now()/1000);ipmsghead[4]=msg;var message=new Buffer(ipmsghead.join(':')+'\0');server.send(message, 0, message.length, port, address);}function Login(msg,rinfo) {sendpacket('119:0',rinfo.address);}function Online(msg,rinfo) {console.log("online");sendpacket('120:',rinfo.address);}function rOnline(msg,rinfo) {sendpacket('121:',rinfo.address);}function rOver(msg,rinfo) {}function NameGroup(msg,rinfo) {sendpacket('6291459:Alice\0Group',rinfo.address);}function rNameGroup(msg,rinfo) {}function reqRsa(msg,rinfo) {if (msg[5].substring(0,5)=='21003') {var pkey=myRsaKey.getPublicKey(),pkeye=pkey.e.toString(16),pkeyn=pkey.n.toString("hex");var m=['115:21003:',pkeye,'-',pkeyn].join('');sendpacket(m,rinfo.address);}}function ansRsa(msg,rinfo) {sendpacket('121:',rinfo.address);if (msg[5].substring(0,5)=='21003') {var key=new Buffer(msg[6].substring(6,262),'hex');pubkeylist[rinfo.address]=key;sendmsg();}}function recvMsg(msg,rinfo) {sendpacket('33:'+msg[1],rinfo.address);if (msg[5].substring(0,5)=='20002') {blowfishdecrypt(myRsaKey.decrypt(new Buffer(msg[6],"hex")),msg[7],function (t) {console.log(rinfo.address+' say: '+t);makemsg('I received',rinfo.address);});}}function Roger(msg,rinfo) {}function blowfishdecrypt(key,msg,callback) {var text=new Buffer(msg,"hex");var iv=new Buffer("0000000000000000","hex");var cipher = mycrypto.createDecipheriv('bf-cbc', key, iv);var buf1 = cipher.update(text, 'hex','binary');buf1 += cipher.final('binary');callback(buf1);}function blowfishencrypt(key,msg,callback) {var iv=new Buffer("0000000000000000","hex");var cipher = mycrypto.createCipheriv('bf-cbc', key, iv);var buf1 = cipher.update(msg, 'binary','hex');buf1 += cipher.final('hex');callback(buf1);}function makemsg(msg,addr) {var buf = mycrypto.randomBytes(16);blowfishencrypt(buf,msg,function (t) {msglist.push([addr,buf.toString('hex'),t].join(':'));sendpacket('114:21003',addr);});}function sendmsg() {for (var i in msglist){var ad=msglist[i].split(':');if (ad[0]!='' && pubkeylist.hasOwnProperty(ad[0]) && pubkeylist[ad[0]]!==null){hostpubkey.setPublicKey(pubkeylist[ad[0]],new Buffer("010001","hex"));var bkey=hostpubkey.encrypt(new Buffer(ad[1],'hex'),'hex');var m=['4194592','20002',bkey,ad[2]].join(':')+'\0';sendpacket(m,ad[0]);msglist.splice(i,1);}}}

局域网内找台计算机运行飞秋,然后本机运行node testfeiq.js,飞秋上发条消息给本机完成测试。

代码下载地址: http://download.csdn.net/detail/lady911/8557265


0 0