使用node-forge pki进行RSA加密

2023-11-11

先放npm官方文档:www.npmjs.com/package/node-forge

在知道RSA加密的大致原理后,再往下看

使用例子

简单写个方法:

// 引入依赖
import forge from 'node-forge';
// base64转换(一般公钥私钥生成都是经过base64转换处理)
const encode64 = str => forge.util.encode64(str);

// 加密的方法,入参是:待加密文本,公钥,是否需要转化为Pem格式
const encrypted = (text: string, publicKey: string, needFormatPem: boolean) => {
  if (!publicKey) return text;
  let curPublicKey = publicKey;
  if (needFormatPem) {
    // 后端无法读取文件时返回的公钥是非Pem格式
    curPublicKey = `-----BEGIN PUBLIC KEY-----\n${publicKey}\n-----END PUBLIC KEY-----`;
  }
  // 生成公钥对象(公钥是Pem格式)
  const publicKeyObj = forge.pki.publicKeyFromPem(curPublicKey);
  // encrypt加密并转换为base64编码格式
  return encode64(publicKeyObj.encrypt(text));
};

export default encrypted;

内容梳理:

1.初始化公钥、私钥对象

需要根据公钥的格式使用对应的生成方法

const pki = forge.pki;

// pem格式
var publicKey = pki.publicKeyFromPem(pem);
// 可以将公钥对象转换回原格式
var pem = pki.publicKeyToPem(publicKey);
// ASN.1编码格式
var publicKey = pki.publicKeyFromAsn1(subjectPublicKeyInfo);
// 可以将公钥对象转换回原格式
var subjectPublicKeyInfo = pki.publicKeyToAsn1(publicKey);

同理,生成私钥需要对应的方法

// convert a PEM-formatted private key to a Forge private key
var privateKey = pki.privateKeyFromPem(pem);

// convert a Forge private key to PEM-format
var pem = pki.privateKeyToPem(privateKey);

// convert an ASN.1 PrivateKeyInfo or RSAPrivateKey to a Forge private key
var privateKey = pki.privateKeyFromAsn1(rsaPrivateKey);

// convert a Forge private key to an ASN.1 RSAPrivateKey
var rsaPrivateKey = pki.privateKeyToAsn1(privateKey);
2.使用公钥/私钥对象进行加密/解密
// 加密
var encrypted = publicKey.encrypt(bytes);

// 解密
var decrypted = privateKey.decrypt(encrypted);

加密解密的方法不仅只是一个入参,还有拓展功能,第二个参数用于指定RSA加密的标准

第二个参数为空时默认为 RSAES PKCS#1 v1.5标准

// 使用RSAES PKCS#1 v1.5标准加密
var encrypted = publicKey.encrypt(bytes, 'RSAES-PKCS1-V1_5');

// 使用RSAES PKCS#1 v1.5标准解密
var decrypted = privateKey.decrypt(encrypted, 'RSAES-PKCS1-V1_5');

// 使用RSAES-OAEP标准加密
var encrypted = publicKey.encrypt(bytes, 'RSA-OAEP');

// 使用RSAES-OAEP标准解密
var decrypted = privateKey.decrypt(encrypted, 'RSA-OAEP');

还有别的参数,可以去文档查看,链接见顶部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用node-forge pki进行RSA加密 的相关文章

随机推荐

  • 支付宝支付接口(即时到账交易接口)

    create direct pay by user 官方参数API文档地址 https doc open alipay com docs doc htm spm a219a 7629140 0 0 dsNjYY treeId 108 art
  • ajax中如何隐藏列,【JS】在chrome等浏览器中,如何隐藏掉ajax请求,使其不会显示在console中...

    由于项目的保密性需要 需要隐藏掉ajax请求接口的地址 请问各位都是怎么做的 回答 纯后端渲染 不用ajax 后端的安全性怎么可能让前端来保证 你最多只能签名一下参数 可以尝试使用中转服务器 假设服务器 B 需要保密 你可以转而请求 A 服
  • Java类加载器

    目录 0 知识储备 JVM内存分区 双亲委派机制 1 Java类加载机制 1 1核心类加载器启动原理 类加载的含义 类加载过程 1 类的加载 2 类的连接 3 初始化 1 2类加载的双亲委派机制 2 类加载器的类型 3 自定义类加载器的实现
  • eclipse svn 忽略 target/.project /.classpath /.settings等 目录

    问题描述 用eclipse同步项目时 会出现target project classpath settings等与代码无关的文件 介绍两种办法 推荐第二种 方法一 在新建项目的时候 在第一次commit 到 SVN 之前 先在项目的根目录设
  • L1,L2,L3 Cache缓存原理

    一 介绍 CPU缓存 Cache Memory 也被称为Cache 是存储器子系统的组成部分 存放着程序经常使用的指令和数据 从广义的角度上看 Cache是快设备为了缓解访问慢设备延时的预留的Buffer 从而可以在掩盖访问延时的同时 尽可
  • qt 中报 error: No rule to make target 这个错误的就解决方法

    最近在用qt设计数据库课设的前端界面 在做好的界面更改资源文件时qt给报了这个错误 error No rule to make target one OneDrive 01 png needed by debug qrc res cpp 我
  • LDAP 常用名词

    LDAP目录结构的最顶部就是根 也就是所谓的基准 DN DN通常有一下三种格式为 DN domain name 域名 域名系统 域名服务器 假定我在一家电子商务公司工作 这家公司在internet上的名字为foobar com o foob
  • web前端统计埋点分离方案

    前言 最近一直在思考一个吸引人的标题对一篇文章的阅读到底影响有多大 所以这篇文章取了一个比较大的标题 内容是炒冷饭 主要是再介绍一下之前在业务里遇见关于统计埋点的问题 以及我的解决方案 Tagmanager Tagmanager tagma
  • selenium解决下拉表单和浏览器下拉进度条问题的问题

    1 有的时候使用selenium自动化模块时会遇到下拉表单的问题 name如何解决这个问题呢 Selenium专门提供了Select类来处理下拉框 导入 Select 类 from selenium webdriver support ui
  • 网站发布一般步骤以及解决方法

    1 在D盘 随便一个地方 新建文件夹 2 在vs项目中点击发布弹出对话框 3 配置文件选择自定义 4 下一步 Publish method 选择file system 5 target location选择第一步创建的文件夹 6 下一步 f
  • 《软件测试的艺术》

    1 每当测试一个程序时 应当想到要为程序增加一些价值 通过测试来增加程序的价值 是指测试提高了程序的可靠性或质量 提高了程序的可靠性 是指找出并最终修改了程序的错误 因此 不要只是为了证明程序能够正确运行而去测试程序 相反 应该一开始就假设
  • datetime数据类型在页面上的显示不完全

    下面两个代码全包含在script标签中 function fmtDate sDate var dt new Date sDate var y dt getFullYear var m dt getMonth 1 var d dt getDa
  • 用VS2015开发Linux程序

    1 开发工具 VS2015Update3 Visual C for Linux Development VC Linux exe 下载链接 介绍 VMware 虚拟机软件 ubuntu 16 04 desktop amd64 iso Lin
  • C# 预处理器指令(学习心得 24)

    预处理器指令 指导编译器在实际编译开始之前对信息进行预处理 所有的预处理器指令都是以 开始 在一行上 只有空白字符可以出现在预处理器指令之前 预处理器指令不是语句 所以它们不以 分号 结束 一个预处理器指令必须是该行上的唯一指令 超级小白友
  • Mysql 一主多备安装部署文档

    Mysql 一主多备安装部署文档 文章目录 Mysql 一主多备安装部署文档 1 主节点配置 1 1 my cnf 配置 1 2 配置同步账号 1 3 授权同步账号 1 4 授权远程登录 1 5 刷新 1 6 查看Master状态 2 Sl
  • vmware workstation 16 player 导出虚拟机ovf文件

    vmware workstation 16 player 导出虚拟机ovf文件 1 找到vm的ovftool 位于C Program Files x86 VMware VMware Player OVFTool 2 找到虚拟机对应 vmx文
  • MATLAB对csv文件的某一列数据进行数据处理

    clc clear all close all M csvread shui A Aref csv 1 2 N csvread kongA Aref csv 1 2 baseline 1 mean M 1 16 baseline 2 mea
  • UWB的定位算法(简单详细易懂)

    系列文章目录 文章目录 系列文章目录 前言 一 控制部分 二 UWB 的测距原理是什么 三 TOF 数学计算 四 Trilateration 三边测量法的原理与计算方法 TDOA平面 1 三边测量法的缺陷是 2 Z 轴准确度比 X 轴 Y
  • 多项目同时进行,如何做好项目管理?

    大部分企业在运营过程中一般会存在多个项目并行推进的情况 一段时间只运营一个项目的情况已经很少 无论是对项目管理者还是项目执行者而言 多项目同时进行比单项目运行更具挑战 多项目管理一般会存在各项目之间抢资源 资源冲突 资源分配不合理 可能存在
  • 使用node-forge pki进行RSA加密

    先放npm官方文档 www npmjs com package node forge 在知道RSA加密的大致原理后 再往下看 使用例子 简单写个方法 引入依赖 import forge from node forge base64转换 一般