我正在开发一个项目,需要实现一个程序,生成 32 字节 AES 密钥(对称密钥),将该密钥发送到服务器,然后使用相同的密钥解密从服务器接收的数据。然而,我在有效实施这一流程方面面临着挑战。
我正在 NodeJs 中使用 crypto 模块。
为了生成 AES 密钥,我使用了以下代码:
const key = crypto.randomBytes(32); // Output: aesEncryptionKeyaesEncryptionKey (example)
然后我对该密钥进行编码并将其发送到服务器,他们在服务器上使用该密钥来加密数据
收到此加密数据后,我需要使用在步骤 1 中生成的密钥来解密数据。
let key = 'aesEncryptionKeyaesEncryptionKey';
let encrypted_text = 'wHCS+Op6ZDc2fy2xwezssW/ThsVq7r2bozo7zze5w5r8d5vtTjlwmZXZWb/d2H7z';
const decipher = crypto.createDecipheriv('aes-256-ecb', Buffer.from(key, 'utf8'), Buffer.alloc(0));
let decryptedKey = decipher.update(encrypted_text, 'base64', 'utf8');
decipher.setAutoPadding(true);
let decryptedKeybuffer = Buffer.concat([decryptedKey, decipher.final()]);
但是我收到以下错误
let key = 'aesEncryptionKeyaesEncryptionKey';
let encrypted_text = 'wHCS+Op6ZDc2fy2xwezssW/ThsVq7r2bozo7zze5w5r8d5vtTjlwmZXZWb/d2H7z';
const decipher = crypto.createDecipheriv('aes-256-ecb', Buffer.from(key, 'utf8'), Buffer.alloc(0));
let decryptedKey = decipher.update(encrypted_text, 'base64', 'utf8');
decipher.setAutoPadding(true);
let decryptedKeybuffer = Buffer.concat([decryptedKey, decipher.final()]);
可以使用
Buffer.from()
方法将字符串键转换为缓冲区。为了解密数据,我使用 createDecipheriv()
方法创建了一个新的解密对象。
目前正在使用
update()
函数对数据进行解密,并通过final()
方法完成解密过程。为了确保数据在加密之前得到适当的填充,请使用 setAutoPadding()
方法。
我希望这有用。请随时发表评论以获得更多帮助。