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}`);
网友评论