Necesita asesoramiento sobre el cifrado AES CTR python vs. Java
Estoy trabajando en el proyecto cuando algunos datos arbitrarios se cifran con Pythoncripta simple (fuenteaquí) y los mismos datos cifrados se utilizan en la aplicación Java.
Me gustaría entender la diferencia conceptual entre JSSE y Pycrypto.
Esta es la parte de Python que hace cifrado (fuente):
counter = Counter.new(HALF_BLOCK, prefix=salt[:HALF_BLOCK//8])
cipher = AES.new(cipher_key, AES.MODE_CTR, counter=counter)
Este es mi intento de volver a implementar Java de la misma operación:
SecretKeySpec key = new SecretKeySpec(cipher_key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(salt, 0, HALF_BLOCK / 8);
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
El problema aquí es la inicialización de la excepción java Cipher throw:
java.security.InvalidAlgorithmParameterException: IV must be 16 bytes long.
at org.bouncycastle.jce.provider.JCEBlockCipher.engineInit(Unknown Source)
at javax.crypto.Cipher.init(Cipher.java:1394)
at javax.crypto.Cipher.init(Cipher.java:1327)
El valor de HALF_BLOCK es 64.
Entonces la pregunta es, ¿cómo funciona la implementación AES de python con el tamaño de clave HALF_BLOCK / 8 y el de Java no?
¡Gracias!