首页 > 解决方案 > 字符串解密是否需要 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});```

标签: netsuitesuitescriptsuitescript2.0

解决方案


是的,您需要同时存储两者。如果没有初始向量,即使使用密码也无法解密消息。这个想法是:所有消息的密码都可以相同,但是 IV 是在加密时创建的,并且总是不同的。IV 可以用 4096 RSA 加密,但所有消息 cab 对于 RSA 来说太长了,你用 AES 加密它。从安全角度来看,AES 并不好,所以我们需要使用密码和一次性密钥 - 初始向量。


推荐阅读