RSA加密算法

写在前面:

了解RSA算法的原理请查看下面的文章

一文搞懂 RSA 算法  来源:简书  作者:somenzz

在使用 Node 进行 RSA 加密之前我们首先需要获取RSA公共和私有密钥:

1.下载 OpenSSL

两个网址:一个是 官方网站 ,另一个是社区整理网站

2.安装 OpenSSL ,查看下面的文章

OpenSSL下载安装  来源:简书  作者:涓涓细流_708d

3.使用 OpenSSL 生成 RSA 密钥

a.打开命令行,进入到安装OpenSSL的bin目录下(我的是默认安装到C盘)

cd C:\OpenSSL-Win64\bin

在命令行中执行

openssl genrsa -aes256 -out rsa-key.pem 2048

上面命令的意思是使用 aes256 进行加密,加密密钥长度为 2048 位,并将结果输出到 res-key.pem 文件中,默认将生成的文件输出到 bin 目录下

执行完后是需要输入密码的,这个密码是用来对RSA密钥加密的

b.通过上面的加密文件 rsa-key.pem 生成私有密钥 rsa-prv.pem

openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem

输入之前生成加密文件时输入的密码

c.生成公共密钥 rsa-pub.pem

openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pem

通过上面生成的步骤生成私钥和公钥后,我们就可以使用Node的方式对文件进行rsa加密

使用 Node 对文件进行 RSA 加密:

'use strict';
const crypto = require('crypto');
const fs = require('fs');

//定义一个同步读取文件的方法
let getFile = (file) => {
    try {
        let pubKey = fs.readFileSync(file, 'utf-8');
        return pubKey;
    } catch(err) {
        console.log(err);
        return false;
    }
}

//读取rsa公钥
let pubKey = getFile('./rsa-pub.pem');
//读取rsa加密私钥
let prvKey = getFile('./rsa-prv.pem');
//读取需要加密的文件
let data = getFile('./data.txt');

//使用私钥加密,公钥解密
const prv_enCrypt = crypto.privateEncrypt(prvKey, Buffer.from(data, 'utf-8') );
const pub_deCrypt = crypto.publicDecrypt(pubKey, prv_enCrypt, 'utf-8');

console.log('使用私钥加密之后的文件: ' + prv_enCrypt.toString('hex'));
console.log('使用公钥解密之后的文件: ' + pub_deCrypt.toString());

//除了可以使用私钥加密公钥解密外还可以使用私钥加密公钥解密
const pub_enCrypt = crypto.publicEncrypt(pubKey, Buffer.from(data, 'utf-8'));
const prv_deCrypt = crypto.privateDecrypt(prvKey, pub_enCrypt);

console.log('使用公钥加密之后的文件: ' + pub_enCrypt.toString('hex'));
console.log('使用私钥解密之后的文件: ' + prv_deCrypt.toString());

//加密后的文件使用fs(文件系统模块)导出
let exEncryptFile = fs.createWriteStream('./exEncryptFile.txt')
exEncryptFile.write( prv_enCrypt.toString('hex') );
exEncryptFile.end();

注:

1.RSA的加密方法的第二个参数需要传入 buffer 类型的数据

2.data.txt 文件是在同一目录下需要加密的文件,记得在执行上面代码的时候创建一个需要加密的文件

3.RSA加密方法即可以使用公钥加密私钥解密,也可以使用私钥加密公钥解密

Node.js 内置模块crypto加密模块(5) RSA的更多相关文章

  1. Node.js 内置模块crypto加密模块(4) Diffie Hellman

    Diffie-Hellman( DH ):密钥交换协议/算法 ( Diffie-Hellman Key Exchange/Agreement Algorithm ) 百科摘录: Diffie-Hell ...

  2. Node.js 内置模块crypto加密模块(3) HMAC

    HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...

  3. Node.js 内置模块crypto加密模块(2) AES

    AES:高级加密标准 ( Advanced Encryption Standard ) AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同 下面是AES加密的Node实现: " ...

  4. Node.js 内置模块crypto加密模块(1) MD5 和 SHA

    MD5:消息摘要算法(Message-Digest Algorithm) SHA家族:安全散列算法( Secure Hash Algorithm ) 1.首先看一个简单的加密 "use st ...

  5. Node.js 内置模块crypto使用事件方法(onreadable)加密的一些问题

    javaScript代码如下: 'use strict'; const crypto = require('crypto'); //实例化一个AES加密对象 const aesEncrept = cr ...

  6. [Node.js] Gzip + crypto in stream

    We can using gzip and crypto with stream: const fs = require('fs') const zlib = require('zlib') cons ...

  7. Node.js 内置模块fs(文件系统)

    fs模块的三个常用方法 1.fs.readFile() -- 读文件 2.fs.writeFile() -- 写文件 3.fa.stat() -- 查看文件信息 fs模块不同于其它模块的地方是它有异步 ...

  8. Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容

    fs.readdir(path[, options], callback) 例: "use strict"; const fs = require("fs"); ...

  9. Node.js 内置模块Stream(流)

    "流"是一种抽象的数据结构 通过使用"流"可以将一段数据分割成几段,并按顺序传输,使用"流"可以降低对系统性能的要求,减少对CPU的消耗 S ...

随机推荐

  1. SpringBoot学习笔记(1):配置Mybatis

    SpringBoot学习笔记(1):配置Mybatis 反思:如果自己写的笔记自己都看不懂,那就不要拿出来丢人现眼! IDEA插件 Free MyBatis Plugin插件可以让我们的MyBatis ...

  2. BZOJ4524 [Cqoi2016]伪光滑数

    BZOJ上的题面很乱,这里有一个题面. 题解: 正解是可持久化可并堆+DP,可惜我不会... 但暴力也可过这道题. 先在不超过N的前提下,在大根堆里加入每个质数的J次方,1<=j, 然后就可以发 ...

  3. LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式 的解决方法

    一.案例1,及解决方案: "LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式." ...

  4. Winfrom和控制台中static修饰方法的问题

    在编写winform程序时,当写完方法名后,按Shift+Alt+F10(vs自动生成方法框架)后生成的方法是实例方法,而当手动为该方法添加static修饰符后,程序仍能正常运行. 而在控制台中,写完 ...

  5. iOS开发数据库-FMDB

    前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...

  6. Android Studio 字体大小和背景色的设置

    豆绿色的RGB值:#C7EDCC 1.打开Android Studio——>Ctrl+Alt+s 或者 File——>Settings 2.在弹窗中选中“Colors&Fonts” ...

  7. [算法]从Trie树(字典树)谈到后缀树

    我是好文章的搬运工,原文来自博客园,博主July_,地址:http://www.cnblogs.com/v-July-v/archive/2011/10/22/2316412.html 从Trie树( ...

  8. docker镜像管理基础

    [root@node01 ~]# docker pull quay.io/coreos/flannel:v0.10.0-amd64 v0.10.0-amd64: Pulling from coreos ...

  9. BZOJ_3672_ [Noi2014]购票_CDQ分治+斜率优化

    BZOJ_3672_ [Noi2014]购票_CDQ分治+斜率优化 Description  今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参 ...

  10. 瞎写的树dfs序

    这里枚举了树的DFS序来解决树上问题的多个板子,自己最好多看看. ↓改↓ ↓求↓ 点 点 ————————>>>这个就算了 点 树 简单, BIT 点 链 重点! 树 树 简单, 线 ...