用js写一个非对称加密的
时间: 2024-09-21 13:04:31 浏览: 38
在JavaScript中,我们可以使用`crypto-js`库来实现非对称加密,特别是公钥密码学,其中最常用的是RSA算法。以下是一个简单的示例,展示如何生成密钥对、加密和解密数据:
首先,你需要安装`crypto-js`库,如果你还没有安装,可以使用npm:
```bash
npm install crypto-js
```
然后,你可以编写以下代码:
```javascript
const CryptoJS = require("crypto-js");
// 1. 生成密钥对 (私钥和公钥)
async function generateKeyPair() {
const keyPair = await CryptoJS.RSA.generateKeys(2048); // 2048位的密钥通常更安全
return {
privateKey: keyPair.export(CryptoJS.enc.Utf8),
publicKey: keyPair.publicKey.export(CryptoJS.enc.Utf8),
};
}
// 2. 加密数据 (使用公钥)
function encrypt(message, publicKey) {
const encryptedMessage = CryptoJS.AES.encrypt(
message,
CryptoJS.util.bytesToBase64(publicKey), // 使用公钥作为加密算法的密码
{ mode: CryptoJS.mode.ECB }
);
return encryptedMessage.toString();
}
// 3. 解密数据 (使用私钥)
function decrypt(encryptedMessage, privateKey) {
try {
const bytes = CryptoJS.util.base64ToBytes(encryptedMessage);
const decryptedMessage = CryptoJS.AES.decrypt(
bytes,
CryptoJS.enc.Utf8.parse(privateKey), // 使用私钥解密
{ mode: CryptoJS.mode.ECB }
).toString(CryptoJS.enc.Utf8);
return decryptedMessage;
} catch (e) {
console.error("Decryption failed:", e);
return null;
}
}
// 示例
(async () => {
const { privateKey, publicKey } = await generateKeyPair();
const message = "Hello, world!";
const encrypted = encrypt(message, publicKey);
console.log("Encrypted message:", encrypted);
const decrypted = decrypt(encrypted, privateKey);
console.log("Decrypted message:", decrypted);
})();
```