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!

Respuestas a la pregunta(1)

Su respuesta a la pregunta