JavaScript 公鑰加密是一種安全保障機制,其通過非對稱加密算法實現(xiàn)。
在傳統(tǒng)的密碼學中,加密和解密使用相同的密鑰。但在公鑰加密中,加密和解密使用不同的密鑰。這意味著加密者只需要知道公鑰,而不需要知道私鑰,就可以將信息加密。解密者才需要知道私鑰才能解密。
例如,在電子商務中,客戶必須向商家提供敏感信息,例如信用卡號碼和地址。使用公鑰加密可以確保敏感信息的傳輸是安全的。
let crypto = require('crypto');
// 生成密鑰對
let { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem'
}
});
console.log('公鑰:', publicKey);
console.log('私鑰:', privateKey);
在上面的代碼中,我們使用 Node.js 自帶的 crypto 模塊生成了 RSA 密鑰對。 publicKye 變量保存了公鑰,privateKey 變量保存了私鑰。我們可以將公鑰傳輸給需要加密信息的人。他們使用公鑰加密信息后,只有我們知道私鑰才能解密。私鑰應保存在安全的位置并妥善保管。
加密步驟如下:
let encrypted = crypto.publicEncrypt({
key: publicKey,
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}, Buffer.from('我們要加密的信息'));
console.log('加密:', encrypted.toString('base64'));
上述代碼中,我們將公鑰和需要加密的信息傳遞給 crypto.publicEncrypt() 函數(shù)。加密后的信息將保存在 encrypted 變量中。最后,我們將加密后的信息轉換為 base64 編碼的字符串,以方便傳輸。
解密步驟如下:
let decrypted = crypto.privateDecrypt({
key: privateKey,
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}, encrypted);
console.log('解密:', decrypted.toString());
在上面的代碼中,我們傳遞私鑰和加密后的信息給 crypto.privateDecrypt() 函數(shù)。解密后的信息將保存在 decrypted 變量中。解密后的信息是二進制數(shù)據(jù),我們將其轉換為字符串以便閱讀。
在使用公鑰加密時,要注意以下幾點:
- 密鑰對的長度越長,越安全;但是密鑰越長,加/解密所需的計算就越多。
- 公鑰必須安全的傳輸,防止被篡改或篡改。私鑰必須保密。
- 加密后的信息必須使用合適的編碼方式保存和傳輸。
上一篇php it
下一篇java的翻譯和編譯