安装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);