介绍
大家好,今天我们将使用JavaScript来查看加密及其兄弟姐妹,解密。
在我们深入研究之前,让我们了解端到端系统的一般方式。为此考虑以下图:
因此,用户A希望通过网络将一些分类信息发送给用户B,但是由于信任问题,用户A决定以格式编码此信息,只有用户B可以解码。
在我们的图中,用户A和用户B在将使用哪种算法的情况下达成共识,然后生成公共/私有密钥对,并在Internet(服务器)上发布其公共密钥。这样,用户A和B都可以将其私钥保持私密以使该系统有效。
为了编码一些信息,用户A将用户B从服务器中获取公共密钥,并使用此公共密钥将原始信息拼写,然后将炒垃圾发送给用户B通过Internet将其发送给用户B。
这些炒数据可能正在通过黑客范围内的不安全,公共网络基础架构进行,但是由于此编码其内容变得具有抗篡改。一旦此加扰的数据到达用户b的结尾,它就会用用户b的私钥解码。用户A和B之间的所有随后的通信都遵循这些过程。结论说,我们可以承认,终点加密的目标是通过确保只有预期的收件人才能访问消息来确保通信。
在Node.js中实现端到端加密
在本教程中,我们将在Node.js中使用内置的加密模块,该模块已退出了开发人员的许多加密功能。
因此,我们的第一步是生成一对公共/私钥,该键将用于加密和解密数据。
要生成键,我们将使用GenerateKeyPairSync()方法,该方法使用RSA算法生成一对键。这是一个示例代码:
const crypto = require('crypto');
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem'
}
});
console.log('Public Key:\n', publicKey);
console.log('Private Key:\n', privateKey);`
在这里,我们使用GenerateKeypairsync()方法使用RSA算法的模量长为4096位。
然后,我们使用publicKeyenCoding和私有按键编码选项来指定密钥的格式。我们还应用了PEM格式,该格式戒烟很普遍用于存储密钥。
加密和解密我们的数据
生成了我们的密钥后,我们想使用它们来加密和解密一些数据,因此,假设我们的数据是string naaman lambert for耶稣,让我们进行加密和解密数据。
const crypto = require('crypto');
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem'
}
});
const message = “ Naaman Lambert is for Jesus”;
console.log('Original Message:\n', message);
const encryptedMessage = crypto.publicEncrypt(publicKey, Buffer.from(message));
console.log('Encrypted Message:\n', encryptedMessage.toString('base64'));
const decryptedMessage = crypto.privateDecrypt(privateKey, encryptedMessage);
console.log('Decrypted Message:\n', decryptedMessage.toString());`
观察Crypto.publicencrypt函数中的某些内容,第二个参数为“ buffer.from(message)”,该函数创建一个新实例的缓冲区对象,并使用提供的消息参数的二进制数据加载。
因此,一旦按下该运行按钮,就应该得到类似的输出:
在上面的示例中,我们首先生成了密钥对,然后定义了一些希望加密的硬编码消息。然后,我们将PublicenCrypt()方法应用于使用公共密钥加密此消息,然后将加密消息打印到控制台。
。为了解密,我们使用PrivatedEcrypt()方法将消息解密,使用生成的私钥和加密消息作为参数。