Node.js 基于 ursa 模块的 RSA 加密解密(已与IOS,Android实现加密通信)

前几天调试一个RSA加密,遇到一些问题,在网上找了好久好久,与Node.js相关的资源少得非常可怜,最后还是靠自己一步一步解决了,今天把代码和一些心得拿出来分享一下:
cnode链接地址:https://cnodejs.org/topic/54d2de4cfbf1e531447acc95

一. 相关知识

这里推介几篇博客,在做加密解密之前先了解一下,我以前没做过,所以上网找了一些,提供大家参考。
算法原理1
算法原理2
关于密钥长度
关于填充
ursa模块
关于RSA的原理什么的,上面的文章有详细的介绍,这里不再赘述,下面开始加密/加密的操作。

二. 生成密钥对

/**
 * 2015-02-03
 * zhaomaoxin
 * generate keys
 */

var fs = require('fs');
var ursa = require('ursa');

var modulusBit = 512;  
var key  = ursa.generatePrivateKey(modulusBit, 65537);

var privatePem = ursa.createPrivateKey(key.toPrivatePem()); //生成私钥
var privateKey = privatePem.toPrivatePem('utf8');
fs.writeFile('private.pem', privateKey, 'utf8', function(error){
   
    if(error){
        throw error;
    }
    console.log('\n私钥privateKey已经保存\n');
    console.log('\n私钥privateKey:\n' + privateKey);
});


var publicPem = ursa.createPublicKey(key.toPublicPem());   //生成公钥
var publicKey = publicPem.toPublicPem('utf8');
fs.writeFile('public.pub', publicKey, 'utf8', function(error){
   
    if(error){
        throw error;
    }
    console.log('\n私钥publicKey已经保存\n');
    console.log('\n私钥publicKey:\n' + publicKey);
});

说明: 将密钥写入文件或者直接使用打印出来,需要使用toPublicPem或者toPrivatePem转换成UTF8编码形式。

三. 密钥导入

加密/解密的双方各自生成密钥对,需保证能导入对方的密钥,并使用公钥进行加密 。
key.js

/**
 * 2015-02-03
 * zhaomaoxin
 * import keys
 */

var ursa = require('ursa');


var client_public  =    '-----BEGIN PUBLIC KEY-----\n'+
                        'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ6d7vkyWjQpHDgpcwBxiAoecUZPeKA7\n'+
                        '5cCgZlnYnXNR08yPAzJuBUrTUODloj3OFxN2WE/VpPSQsu2KGpBIO9MCAwEAAQ==\n'+
                        '-----END PUBLIC KEY-----';


var client_private =    '-----BEGIN RSA PRIVATE KEY-----\n'+
                        'MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAnp3u+TJaNCkcOClz\n' +
                        'AHGICh5xRk94oDvlwKBmWdidc1HTzI8DMm4FStNQ4OWiPc4XE3ZYT9Wk9JCy7Yoa\n' +
                        'kEg70wIDAQABAkAZ0wDLVaVWBLNxeV4d3l4Vt6sdlWbAP8BCQlsnmZrY4WIIy1HE\n' &
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值