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异步编程
Dec 04 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 NodeJs
nodejs处理tcp连接的核心流程
Feb 26 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
php获取远程图片体积大小的实例
2013/11/12 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
Python删除windows垃圾文件的方法
2015/07/14 Python
Django卸载之后重新安装的方法
2017/03/15 Python
Django中使用Celery的教程详解
2018/08/24 Python
python 美化输出信息的实例
2018/10/15 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
Django Rest framework权限的详细用法
2019/07/25 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
诚信考试倡议书
2014/04/15 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技