web端node-forge pki RSA加解密

本文介绍了如何使用Node.js库node-forge进行公钥和私钥的生成,包括openssl命令的操作,并展示了如何对明文进行Base64编码加密和解密的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装node-forge

npm install node-forge --save-dev

在当前安装的根目录下执行脚本命令生成公钥和私钥

生成私钥:使用openssl genrsa命令生成私钥,例如"openssl genrsa -out prv.key"。

生成公钥:使用openssl rsa命令从私钥中提取公钥,例如"openssl rsa -in prv.key -pubout > pub.key"。

生成文件如下:

例子:demo.js

// 引入依赖

import forge from 'node-forge';

// base64转换(一般公钥私钥生成都是经过base64转换处理)

var public_Key = `-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlVB6zMTeR16nb7c+l0Gi

FTg6OQx4uq7ZH5tLaP+eOCRQYMHqoPRdW9YjiNGZVy60J8xgTHIYA72jMiTyO6zZ

3o8kucB2dpmaEARqvYdhkyDbZSqkXp3agW8lxGubnoYWn0lFdYiK1MH3Op+zBgP4

sG8/WlFNQZiF3pMREtTm3TdHkbjXpdCfbIPdqtkF0YszkD1kcOf8PWP502U3TH6c

pyHHFEmDIWq0erZhYFJSajl6PnDPTQ5SZNWB6h5kphovbftbE7DNHz5Gy/ODrxHg

L8U6XpldQuTkUAXcUI0CxiFyHs1xAYexlksiKN9c1tHg8ncUip1z734Kw/Amc2ef

nQIDAQAB

-----END PUBLIC KEY-----

`;

var private_Key = `-----BEGIN PRIVATE KEY-----

MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCVUHrMxN5HXqdv

tz6XQaIVODo5DHi6rtkfm0to/544JFBgweqg9F1b1iOI0ZlXLrQnzGBMchgDvaMy

JPI7rNnejyS5wHZ2mZoQBGq9h2GTINtlKqRendqBbyXEa5uehhafSUV1iIrUwfc6

n7MGA/iwbz9aUU1BmIXekxES1ObdN0eRuNel0J9sg92q2QXRizOQPWRw5/w9Y/nT

ZTdMfpynIccUSYMharR6tmFgUlJqOXo+cM9NDlJk1YHqHmSmGi9t+1sTsM0fPkbL

84OvEeAvxTpemV1C5ORQBdxQjQLGIXIezXEBh7GWSyIo31zW0eDydxSKnXPvfgrD

8CZzZ5+dAgMBAAECggEABB8ZlKdmf0/UjVfgiWpNYAqSSNrYRkbnRWES/s33fxM5

iMIxiMnV/d/2USN/+REX9fVFPzbzBL9qTssISK9nwCXxXJM8cd+higmlLKAdCGOi

yrMXoGj5DBOWVkqmHAUVgMYT/b+MHX1RJrQby/G2HqCjfgm6eTINl+w1T3DDAp4m

NzMB+zckGAWhT2hk1VNRKbtL0BHnW/nZZP0MLqpo48ANbnmd1xGDqEvrYzGCi7TZ

4AP+9Pbm/cRva3kBy6KWSN/zmH13FH5Sw40iXSKusnunAAn5HkGC2FYcCOxxIdZE

8V0Oq+pGJjCEfSEkCgIUVffEl8K3YRAQPRJUAJEzwQKBgQDGRKgPnNnqQUA31t6X

TpIzqdPeVOAzWcRC26NY6D2fDgsmsrbyJXhhu+RmYKZ+aXOQwGwUykvaXaUkIw21

joiMmOQI9XbHp1zTMTIwqTcK+iHXYPHLDaD89djTeKCKx3aWeM5Nc04MpaTQCmmG

DM5MRvspvzleR6/nkxTwazIJUQKBgQDAyrLuftP+KuD3DVVkOIPBoHBhjAI0dRJK

BkVPyRHt3gOjRz52SFB4IcyBkCwTy6YhaM89at0UctI7i0kcQCEkrW7+R2YX3vze

dz/ZtObioUgKln6Cd7Al7F3yMki6d5sKHgBEG5sjh7FniaOqeVV4E8QCoruFV4D4

JrqCv3EejQKBgQC2qSYUTDNPaBIb369uwopbYoi4+oUbigYQen2BOWUcFjobyuZV

LEQ99na0AzMgn1JC96Qbe0xqv3+XTVwh+lC/B1R/FHX79qrEPzy4LA1z5YIsBTp+

Ee5RXsYF/coaUS1l76JRJHuxlyHCMPWK9F1TVMmsamoV/AGJXa4a2QdeIQKBgAyF

HVmfouS+pB1nIESB5wyL/sBW902wzJ9CCP5FcISiBlp0JfpId/FVQJKpajNe5ksF

I3A5oGHTkxOK2BSdlYlsOekJeffS41kPJXZd6SCOmL8XRt/yJd5Qm0k/OrnhSpA9

oobJxClqhnrS1W4csxA5OGFzb/oY1KdI3JPhGteBAoGBAJVMErs91OfMmryP4ebW

/RbOVWBMpe8ansXsLtDkZLVXv0c1tbYOGsXnY+0BhfYd1fMVhFUOI3TycVKZTAE8

pwMxLFtBq7qcvi0shV2tQT1q0/2PDmFwZVe1QWQ/2f8zBvFu+ojEeLqZVFYFWVzd

aEdePTl5apfC5ZRcPb+KOULl

-----END PRIVATE KEY-----

`;

const plaintext = '123你好.,/.,6557&$#%$^%$';

const publicObj = forge.pki.publicKeyFromPem(public_Key);

var buffer = forge.util.createBuffer(plaintext, 'utf8');

var bytesText = buffer.getBytes();

const publicbytes = publicObj.encrypt(bytesText);

// 转换成 bytes 对象之后输出不同类型的结果

const encrypted = forge.util.encode64(publicbytes);

const privateObj = forge.pki.privateKeyFromPem(private_Key);

const bytes = forge.util.decode64(encrypted);

// 需要转换成 bytes 对象再解密

const decrypted = privateObj.decrypt(bytes);

// 需要转换成decodeUtf8才是真正的解密字符

const decryptedUtf8 = forge.util.decodeUtf8(decrypted);

console.log('解密:', decryptedUtf8);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值