const crypto = require('crypto');
// 生成密钥对
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
// 公钥加密
const encryptWithPublicKey = (message) => {
const buffer = Buffer.from(message, 'utf8');
const encrypted = crypto.publicEncrypt(publicKey, buffer);
return encrypted.toString('base64');
};
// 私钥解密
const decryptWithPrivateKey = (encryptedMessage) => {
const buffer = Buffer.from(encryptedMessage, 'base64');
const decrypted = crypto.privateDecrypt(privateKey, buffer);
return decrypted.toString('utf8');
};
// 私钥签名
const signWithPrivateKey = (message) => {
const sign = crypto.createSign('SHA256');
sign.update(message);
sign.end();
const signature = sign.sign(privateKey);
return signature.toString('base64');
};
// 公钥验证签名
const verifyWithPublicKey = (message, signature) => {
const verify = crypto.createVerify('SHA256');
verify.update(message);
verify.end();
return verify.verify(publicKey, signature, 'base64');
};
// 测试公钥加密和私钥解密
const message = 'Hello World!';
// const encryptedMessage = encryptWithPublicKey(message);
// console.log(`Encrypted message: ${encryptedMessage}`);
// const decryptedMessage = decryptWithPrivateKey(encryptedMessage);
// console.log(`Decrypted message: ${decryptedMessage}`);
// 测试私钥签名和公钥验证签名
const signature = signWithPrivateKey(message);
console.log(`Signature: ${signature}`);
const isSignatureValid = verifyWithPublicKey(message + '1', signature);
console.log(`Is signature valid: ${isSignatureValid}`);
nodejs非对称加密简单demo实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一 : 对称加密(DES、AES) 1.DES 2 : AES 二 : 非对称加密(RSA) 三 :MD5、SHA...
- EncryptionInfo Android加密库 github传送门 依赖 使用说明 Hash算法实现 代码示例...
- 前言: 在我们开发中免不了和服务器做一些数据交互,在交互过程中走得都是http请求,这类请求不像https那样的安...
- 1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。(2) 非对称...