要用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 了

参考

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 java rsa_NodeJS加密解密及node-rsa加密解密用法详解相关推荐

  1. Java类中this关键字和static关键字的用法详解

    今天给大家总结介绍一下Java类中this关键字和static关键字的用法. 文章目录 this关键字用法: 1:修饰属性,表示调用类中的成员变量 2:this修饰方法 3:this表示当前对象的引用 ...

  2. java 字节缓冲_Java字节缓冲流原理与用法详解

    本文实例讲述了Java字节缓冲流原理与用法.分享给大家供大家参考,具体如下: 一 介绍 BufferInputStresm和BufferOutputStream 这两个流类为IO提供了带缓冲区的操作, ...

  3. Java基础篇(04):日期与时间API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分 ...

  4. Java并发编程(06):Lock机制下API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Lock体系结构 1.基础接口简介 Lock加锁相关结构中涉及两个使用广泛的基础API:ReentrantLock类和Condition接 ...

  5. Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解

    什么时运行时异常?什么是非运行时异常? 通俗的讲: 运行时异常:就是编译通过,运行时就崩了,比如数组越界. 非运行时异常:就是编译不通过,这时就得必须去处理了.不然就没法运行了. 全面的讲: Thro ...

  6. java基础之 反射_Java基础之反射原理与用法详解

    本文实例讲述了Java基础之反射原理与用法.分享给大家供大家参考,具体如下: 1.什么是反射? 反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx& ...

  7. php mhash,PHP加密扩展库-Mhash扩展库实例用法详解

    PHP加密扩展库-Mhash扩展库 什么是Mhash扩展库:Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启.mhash的可以用于创建校验数值,消息摘要,消息认证码, ...

  8. java 对象数组定义_Java对象数组定义与用法详解

    本文实例讲述了Java对象数组定义与用法.分享给大家供大家参考,具体如下: 所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据 ...

  9. nodejs 本地php服务器,node.js创建本地服务器详解

    本文主要和大家分享node.js创建本地服务器详解,简易上手node.js后,我们就可以在自己电脑上创建本地服务器了.希望能帮助到大家. 一.先上代码.//请求Node.js自带的http模块. va ...

最新文章

  1. 《LeetCode力扣练习》第31题 下一个排列 Java
  2. Spring Security3.1登陆验证
  3. 书写存储过程遇到的问题(后续添加中。。。。)
  4. 【总结】SAP 供应商寄售/客户寄售
  5. 第六讲 Python中的字符串(二)(字符串的操作)
  6. 阿里云人工智能ET夺肺结节诊断世界冠军
  7. LVS+Keepalive 实现负载均衡高可用集群
  8. 近300万记录的论坛还用这个分页存储过程
  9. c语言实现socket转json,C++实现json形式的Socket传输图片
  10. map和pair配合使用
  11. 电商美工需要的素材PSD分层模板
  12. Struts2文件上传超出配置大小的解决办法
  13. long 和 Object的相互转换
  14. java对接电信nb物联网平台_解决传统GPS定位弊端,中国电信NB网关一招致胜
  15. php远程文件无法编辑,“脚本编辑器”远程文件编辑漏洞
  16. java rxtx 64_win7 64为下使用rxtx串口通信
  17. Python修改图片分辨率(附代码) | Python工具
  18. signature=f81ed620b6d6e6cb4bbe5a4d79d445b8,Lubricating compositions
  19. CC2530步进电机
  20. 圆弧与直线相切画法_机械制图常识:圆弧连接画法

热门文章

  1. 黑马程序员_关于2048小游戏的一些经验总结
  2. 前端开发实现点击出现不断向上可变色心形的效果
  3. 鸿蒙系统包括8x吗,华为荣耀8X可以升级鸿蒙系统吗?
  4. 数据结构 | 线性查找
  5. 如何在php网站上插入站长统计,wordpress加入站长统计功能
  6. PC如何支持SMB2
  7. houdini vellum 显卡驱动造成解算崩溃笔记
  8. pdfjs-dist 实现pdf文件在线预览
  9. ns3学习(二)——tcp-NewReno
  10. 推荐一款高颜值的 Spring Boot 快速开发框架