我们有一个项目,需要在客户端实施AES-GMC。目前,我们计划使用Forge.js。在docs中,是这样实现的:
var key = forge.random.getBytesSync(16);
var iv = forge.random.getBytesSync(16);
// encrypt some bytes using GCM mode
var cipher = forge.cipher.createCipher('AES-GCM', key);
cipher.start({
iv: iv, // should be a 12-byte binary-encoded string or byte buffer
additionalData: 'binary-encoded string', // optional
tagLength: 128 // optional, defaults to 128 bits
});
cipher.update(forge.util.createBuffer(someBytes));
cipher.finish();
var encrypted = cipher.output;
var tag = cipher.mode.tag;
// outputs encrypted hex
console.log(encrypted.toHex());
// outputs authentication tag
console.log(tag.toHex());
在上面的代码示例中,选项对象参数中有一个可选的additionalData
属性,该属性被馈送到cipher.start()
。
我们计划在additionalData
中设置仅用户知道的用户输入(我们将不会存储此数据),这样我们就可以实现用户数据的本地加密,这样只有用户才能访问权限和解密数据的能力。
什么是AdditionalData?为实现我们的计划而在AdditionalData中设置用户输入是否安全?这种方法会影响加密过程的安全性吗?
文档中没有关于此的讨论,所以我去这里看看有经验的人是否可以提供帮助。