字符串解密是否需要guid和iv(初始化向量)

时间:2018-12-14 18:32:12

标签: netsuite suitescript suitescript2.0

我正在像下面那样使用guid进行字符串加密,并存储cipherout.ciphertext值,但不存储cipherout.iv值。 但是,在解密时,为什么我不能只传递密钥,而不是同时传递key和cipherout.iv值。因为它在解密时要求两个值。我需要同时存储key和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});```

SECONDFILE.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});```

1 个答案:

答案 0 :(得分:0)

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