netsuite - 字符串解密是否需要 guid 和 iv(初始化向量)
问题描述
我正在使用 guid 进行字符串加密,如下所示并存储 cipherout.ciphertext 值但不存储 cipherout.iv 值。但是在解密时,为什么我不能只传递密钥,而不是传递密钥和 cipherout.iv 值。因为它在解密时要求这两个值。我是否需要同时存储密钥和 cipherout.iv 值以进行解密?请指教
FIRSTFILE.js:
var guid = "4ab23a136dc347d";
var inputString = "sometext";
// Create the key
var key = crypto.createSecretKey({guid:guid, encoding:encode.Encoding.UTF_8});
// Encrypt
var cipher = crypto.createCipher({algorithm: crypto.EncryptionAlg.AES, key: key});
cipher.update({input: inputString, inputEncoding: encode.Encoding.UTF_8});
var cipherout = cipher.final({outputEncoding: encode.Encoding.HEX});```
第二文件.JS
// Decrypt
var decipher = crypto.createDecipher({algorithm: crypto.EncryptionAlg.AES, key: key, iv:cipherout.iv}); //HERE
decipher.update({input: cipherout.ciphertext, inputEncoding: encode.Encoding.HEX});
var decipherout = decipher.final({outputEncoding: encode.Encoding.UTF_8});```
解决方案
是的,您需要同时存储两者。如果没有初始向量,即使使用密码也无法解密消息。这个想法是:所有消息的密码都可以相同,但是 IV 是在加密时创建的,并且总是不同的。IV 可以用 4096 RSA 加密,但所有消息 cab 对于 RSA 来说太长了,你用 AES 加密它。从安全角度来看,AES 并不好,所以我们需要使用密码和一次性密钥 - 初始向量。
推荐阅读
- amazon-web-services - graphql-tools 的 makeExecutableSchema 因架构中的 AWSDateTime 而失败
- sql-server - 用于 linux 的 sql server 是否支持用 C# 编写的 udf?
- vba - 访问 Chr 函数返回不同的代码
- python - 如何在 JSON 中打印 dict 中的字符串列表
- r - 使用 SjPlot 绘制回归时更改交互项的标签
- mysql - MySQL子查询不返回相关结果
- python - 如何修改通过 df.loc[row] 定义的系列中的数据框元素?
- mongodb - Javers - 无法在文档中跟踪 mongo 更新
- python - 使用 Cloud Function 默认服务帐号访问 Gmail API
- java - Flink DataStream 如何将自定义的 POJO 合并到另一个 DataStream 中