1.安装openss

直接下载window下的安装包

http://houjixin.blog.163.com/blog/static/3562841020144143494875/

以我发博文现在的例子说明,大家都是64位操作系统吧。

选择最新版本的win64版本,体积更大的33MB的安装程序下载安装吧

选择安装目录傻瓜安装下一步下一步一直到完成

2.生成RSA密钥文件 我安装到了C:\OpenSSL-Win64下  到C:\OpenSSL-Win64\bin目录下点击openssl.exe

启动后输入genrsa -out rsa_private_key.pem 1024 回车

此时,我们可以在bin文件夹中看到一个文件名为rsa_private_key.pem的文件,用记事本方式打开它,可以看到-----BEGIN RSA PRIVATE KEY-----开头,-----END RSA PRIVATE KEY-----结尾的没有换行的字符串,这个就是原始的私钥。

3.把RSA私钥转换成PKCS8格式

使用cmd cd到目录去执行命令 ,调整cmd命令框的宽度,为什么不直接点openssl.exe 我下面说

输入命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt,并回车
得到生成功的结果,这个结果就是PKCS8格式的私钥

(如果上面不用cmd中执行openssl.exe,你会发现无法复制完整转换后的文件)

右键点击openssl窗口上边边缘,选择编辑→标记,选中要复制的文字(如上图),
此时继续右键点击openssl窗口上边边缘,选择编辑→复制,
把复制的内容粘土进一个新的记事本中,重命名为rsa_private.key文件,只要知道这个是PKCS8格式的私钥即可

4.生成公钥

输入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,并回车,
得到生成成功的结果,如下图:

5.node.js实例,使用了第三方库node-rsa

var NodeRSA = require('node-rsa');
var fs= require('fs'); var onerror =(e) =>{
console.log("解密失败"); }
var onfinally =() =>{
console.log("最终做什么");
} fs.readFile('rsa_private.key','utf-8',function(err,data){
if(err){
console.log(data);
}else{
console.log(data);
privatekey= new NodeRSA(data); var text = 'Hello RSA!';
var encrypted = privatekey.encrypt(text, 'base64');
console.log('加密encrypted: ', encrypted);
var decrypted = privatekey.decrypt(encrypted, 'utf8');
console.log('解密decrypted: ', decrypted); var encrypted1 ='mIJocRfF+MWS3J6+fkPSM9ZAMSZhXxHC+/w0UuT+t6ZmLnoamQ6WKwOBPQ+o+mazk61MFdyImWVW+51dYLc7kE4Eey4y+qB23/ahC9Mi/bJqivWgUHeLPjfLMqXcNVrFSbOB33+7N/fsWAWLJmHuFHaNwP1DqPLH9nY501qoMvY=';
var decrypted = privatekey.decrypt(encrypted1, 'utf8');
console.log('使用正确的加密串解密decrypted: ', decrypted); try{
var encrypted2 ='c7kE4Eey4y+qB23/ahC9Mi/bJqivWgUHeLPjfLMqXcNVrFSbOB33+7N/fsWAWLJmHuFHaNwP1DqPLH9nY501qoMvY=';
var decrypted = privatekey.decrypt(encrypted2, 'utf8'); }catch(e){
onerror(e);
}finally{
onfinally();
} }
})

  

6.私钥文件如何放置到全局变量中,闭包写的,有改进意见可提出,欢迎吐槽,当然也可以放到redis或者memcache中

RSAkey.js

var fs= require('fs');
var path = require('path'); module.exports = (function(){
var private = '';//在函数内声明一个变量,作用域是函数内 return function(){ //返回的一个function能访问到_value,所以_value并不是global级别的变量,但是可以通过这个接口访问到
if(private=='') {
var paths = path.resolve(__dirname,'../rsa_private.key');
fs.readFile(paths, 'utf-8', function (err, data) {
private = data;
if(private.length!=0){
console.log("success read RSA file");
}
return private;
});
}else{
return private;
}
}; })();//一个立即执行的匿名函数

 

初始化的时候引入

var RSAkey = require('./util/RSAkey');

var key = RSAkey(); 

调用时候引入

var key = RSAkey(); 

node.js下使用RSA加密事例(windows)的更多相关文章

  1. Node.js安装及环境配置之Windows篇

    Node.js安装及环境配置之Windows篇   一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1. ...

  2. Node.js安装及环境配置之Windows篇(转:https://www.cnblogs.com/zhouyu2017/p/6485265.html)

    Node.js安装及环境配置之Windows篇(原文地址:https://www.cnblogs.com/zhouyu2017/p/6485265.html)   一.安装环境 1.本机系统:Wind ...

  3. node.js 下依赖Express 实现post 4种方式提交参数

    上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...

  4. npm 是node.js下带的一个包管理工具

    npm 是node.js下带的一个包管理工具          npm install -g webpack webpack是一个打包工具 gulp是一个基于流的构建工具,相对其他构件工具来说,更简洁 ...

  5. node.js下操作cookie

    cookie,又是cookie.工作中与cookie打交道很多次,不过时间跨度也大,每总结多一次,就加深了解多一点. cookie,一定是放在浏览器中的,用于浏览器保存一些小额度的内容.每次我们去访问 ...

  6. Node.js安装及环境配置之Windows篇---完美,win7已测

    一.安装环境 1.本机系统:Windows 10 Pro(64位) (楼主win7,完美通过)2.Node.js:v6.9.2LTS(64位) (楼主版本2018-11-01下载的最新版本) 二.安装 ...

  7. Node.js 安装及环境配置之 Windows 篇

    一.安装环境 1.本机系统:Windows 10 企业版(64位)2.Node.js:node-v8.9.4-x64.msi(64位) 二.安装Node.js步骤 1.下载对应自己系统对应的 Node ...

  8. Node.js下的Hello World

    Node.js技术现在可谓是如火如荼,前后端都统一为Javascript的体验绝对是受到了很多人的青睐,我都后悔以前没抽时间好好学一学Javascript了. 首先,我来介绍一下Node.js.本人实 ...

  9. 深入浅出Node.js(下)

    (五):Node.js的异步实现 专栏的第五篇文章<Node.js的异步实现>.之前介绍了Node.js的事件机制,也许读者对此尚会觉得意犹未尽,因为仅仅只是简单的事件机制,并不能道尽No ...

随机推荐

  1. 三维网格精简算法(Quadric Error Metrics)附源码

    在计算机图形应用中,为了尽可能真实呈现虚拟物体,往往需要高精度的三维模型.然而,模型的复杂性直接关系到它的计算成本,因此高精度的模型在几何运算时并不是必须的,取而代之的是一个相对简化的三维模型,那么如 ...

  2. [No000096]程序员面试题集【上】

    对几家的面试题凭记忆做个总结,基本全部拿到offer,由于时间比较长,题目只写大体意思,然后给出自己当时的答案(不保证一定正确): abstract类不可以被实例化 蛋糕算法: 平面分割空间:(n-1 ...

  3. [LeetCode] Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  4. [LeetCode] Clone Graph 无向图的复制

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...

  5. [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 这道 ...

  6. [LeetCode] Unique Paths 不同的路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  7. D3D三层Texture纹理经像素着色器实现渲染YUV420P

    简单记录一下这两天用Texture实现渲染YUV420P的一些要点. 在视频播放的过程中,有的时候解码出来的数据是YUV420P的.表面(surface)通过设置参数是可以渲染YUV420P的,但Te ...

  8. 浅谈 Web 中前后端模板引擎的使用

    前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...

  9. C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有

    前言:最近项目里面有一些对Excel操作的需求,博主想都没想,NPOI呗,简单.开源.免费,大家都喜欢!确实,对于一些简单的Excel导入.导出.合并单元格等,它都没啥太大的问题,但是这次的需求有两点 ...

  10. leecode系列--Two Sum

    学习这件事在任何时间都不能停下.准备坚持刷leecode来提高自己,也会把自己的解答过程记录下来,希望能进步. Two Sum Given an array of integers, return i ...