NodeJS加密解密及node-rsa加密解密用法详解


Posted in NodeJs onOctober 12, 2018

要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法

初始化环境

新建一个文件夹 node-rsa-demo , 终端进入,运行下面命令初始化

cd node-rsa-demo
npm init # 一路回车即可
npm install --save node-rsa

生成公钥私钥

在 node-rsa-demo 下新建一个文件 index.js 写上如下代码

var NodeRSA = require('node-rsa')
var fs = require('fs')
function generator() {
 var key = new NodeRSA({ b: 512 })
 key.setOptions({ encryptionScheme: 'pkcs1' })
 var privatePem = key.exportKey('pkcs1-private-pem')
 var publicPem = key.exportKey('pkcs1-public-pem')
 fs.writeFile('./pem/public.pem', publicPem, (err) => {
 if (err) throw err
 console.log('公钥已保存!')
 })
 fs.writeFile('./pem/private.pem', privatePem, (err) => {
 if (err) throw err
 console.log('私钥已保存!')
 })
}
generator();

先在 node-rsa-demo 文件夹下新建一个文件夹 pem 用来存放密钥的,然后执行 node index.js ,会发现在 pem 文件夹下生成了两个文件

  • private.pem
  • public.pem

加密

加密 hello world 这个字符串

function encrypt() {
 fs.readFile('./pem/private.pem', function (err, data) {
 var key = new NodeRSA(data);
 let cipherText = key.encryptPrivate('hello world', 'base64');
 console.log(cipherText);
 });
}
//generator();
encrypt();

然后执行 node index.js 终端里会输出一串类似

fH1aVCUceJYVvt1tZ7WYc1Dh5dVCd952GY5CX283V/wK2229FLgT9WfRNAPMjbTtwL9ghVeYD4Lsi6yM1t4OqA== 的base64字符串,这就是用私钥加密后的密文了

解密

把上一步加密获得的密文复制粘贴到下面要解密的方法内

function decrypt() {
 fs.readFile('./pem/public.pem', function (err, data) {
 var key = new NodeRSA(data);
 let rawText = key.decryptPublic('fH1aVCUceJYVvt1tZ7WYc1Dh5dVCd952GY5CX283V/wK2229FLgT9WfRNAPMjbTtwL9ghVeYD4Lsi6yM1t4OqA==', 'utf8');
 console.log(rawText);
 });
}
//generator();
//encrypt();
decrypt();

执行 node index.js 会发现又拿到 hello world

参考

https://github.com/rzcoder/node-rsa

PS:下面通过一段代码看下nodejs加密解密

nodejs是通集成在内核中的crypto模块来完成加密解密。

常用加密解密模块化代码:

/**
 * Created by linli on 2015/8/25.
 */
var crypto = require('crypto');

//加密
exports.cipher = function(algorithm, key, buf) {
 var encrypted = "";
 var cip = crypto.createCipher(algorithm, key);
 encrypted += cip.update(buf, 'binary', 'hex');
 encrypted += cip.final('hex');
 return encrypted
};

//解密
exports.decipher = function(algorithm, key, encrypted) {
 var decrypted = "";
 var decipher = crypto.createDecipher(algorithm, key);
 decrypted += decipher.update(encrypted, 'hex', 'binary');
 decrypted += decipher.final('binary');
 return decrypted
};

此处,只针对可逆加密。

总结

以上所述是小编给大家介绍的NodeJS加密解密及node-rsa加密解密用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 #NodeJs
nodejs实现范围请求的实现代码
Oct 12 #NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 #NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 #NodeJs
nodejs aes 加解密实例
Oct 10 #NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 #NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 #NodeJs
You might like
10个实用的PHP正则表达式汇总
2014/10/23 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
python更新列表的方法
2015/07/28 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
python中关于数据类型的学习笔记
2020/07/19 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
美国探亲签证邀请信
2014/02/05 职场文书
英语专业自荐书
2014/06/13 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
担保书范文
2019/07/09 职场文书
创业计划书之宠物店
2019/09/19 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python