让我简短地解释一下.我在python中有这个加密器:
它使用PyCrypto库.
from Crypto import Random
from Crypto.Cipher import AES
from Crypto.Util import Counter
iv = Random.new().read(8)
encryptor = AES.new(
CRYPTOGRAPHY_KEY, // 32 bytes
AES.MODE_CTR,
counter=Counter.new(64, prefix=iv),
)
我想在Java中为其提供解密器.
我写了这段代码,但它引发了java.security.InvalidAlgorithmParameterException:错误的IV长度:必须为16个字节长.
SecretKeySpec key = new SecretKeySpec(KEY, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
附言我应该指出,我不是经验丰富的Java开发人员.
更新.
问题在于初始化向量.
特别感谢@Andy的时间.
解:
byte[] nonceAndCounter = new byte[16];
System.arraycopy(iv,