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中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
nodejs实现UDP组播示例方法
Nov 04 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
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
功能强大的php分页函数
2016/07/20 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
Python itertools模块详解
2015/05/09 Python
Django中使用group_by的方法
2015/05/26 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python中几种自动微分库解析
2019/08/29 Python
基于Python实现简单学生管理系统
2020/07/24 Python
Solaris操作系统的线程机制
2015/07/28 面试题
高三生物教学反思
2014/01/25 职场文书
个人收入证明格式
2015/06/24 职场文书
大学生十八大感想
2015/08/11 职场文书
员工给公司的建议书
2019/06/24 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
Python实现视频自动打码的示例代码
2022/04/08 Python
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python