解密 AES-256 密码

问题描述

我正在使用 Cipher.decrypt 来解密 AES-256。在 saltOrIV 中,我按如下方式发送:

var ivBytes = Encoding.fromHex("000000000000000000000000");
var ivSend = Encoding.toBase64(ivBytes);

cipher.decrypt(bodyBase64,key,"AES/GCM/PKCS5Padding",ivSend,0);

但我收到以下异常:com.demandware.beehive.core.internal.crypt.EncryptionException: com.demandware.beehive.core.internal.crypt.EncryptionException: java.security.InvalidAlgorithmParameterException: Unsupported parameter: javax.crypto.spec.IvParameterSpec

有人可以帮助我解决我做错的事情吗?

谢谢

解决方法

首先,"AES/GCM/PKCS5Padding" 没有意义,使用 "AES/GCM/NoPadding" 代替因为 GCM 不需要任何填充

要解决此问题,请使用 ivBytes 而不是 ivSend。十六进制和基数 64 是二进制的文本表示。 IV 本身应该由 12 个二进制字节组成,而不是包含 ASCII 中的 base 64 的 16 个字节。

请注意,要保证 GCM 的安全,“IV”应该是唯一值,即所谓的随机数。否则,您必须为每次加密使用不同的密钥。