nodejs非对称加密简单demo实现

2023-06-18  本文已影响0人  JakeBless
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}`);

上一篇 下一篇

猜你喜欢

热点阅读