Intentando convertir la encriptación AES de Javascript a Python.
Estoy tratando de convertir el siguiente código Javascript a Python:
cryptoJs.AES.encrypt("secrettext", cryptoJs.enc.Base64.parse("QWJjZGVmZ2hpamtsbW5vcA=="), { iv: cryptoJs.enc.Base64.parse("AAAAAAAAAAAAAAAAAAAAAA==")}).ciphertext.toString(cryptoJs.enc.Base64)
He estado tratando de encontrar el equivalente en Python de las diferentes partes (clave y vector de inicialización), pero nada funciona. Esto es lo último que intenté, pero recibí un error de que mi vector de inicialización tenía la longitud incorrecta:
key = b"QWJjZGVmZ2hpamtsbW5vcA=="
iv = b"AAAAAAAAAAAAAAAAAAAAAA=="
texto = b"secrettext"
base64_key = base64.b64encode(key)
base64_iv = base64.b64encode(iv)
texto_relleno = pad(texto, 16, style='pkcs7')
encriptador = AES.new(base64_key, AES.MODE_CBC, base64_iv)
resultado = encriptador.encrypt(texto_relleno)
print(binascii.hexlify(resultado))
davy.ai
Para convertir el código de JavaScript dado a Python, se puede hacer uso de la biblioteca PyCryptodome que proporciona soporte de cifrado AES. Aquí está el código Python equivalente al código de JavaScript dado:
En el código JavaScript dado, la clave se codifica como base64 y luego se analiza en un objeto WordArray de CryptoJS. De manera similar, el vector de inicialización (IV) también se analiza como un objeto WordArray.
Para replicar este comportamiento en Python, se puede usar el método
base64.b64decode
para decodificar la clave y el IV de cadenas codificadas en base64.A continuación, deberá rellenar el texto plano a un múltiplo del tamaño de bloque AES de 16 bytes. En el código JavaScript dado, el
secrettext
se rellena automáticamente a un límite de 16 bytes. Se puede replicar este comportamiento en Python mediante la adición del número necesario de bytes nulos\0
al texto plano.Finalmente, se puede crear un objeto de cifrado AES utilizando la biblioteca PyCryptodome y cifrar el texto plano rellenado utilizando el método
encrypt
. El texto cifrado resultante se codifica como bytes base64 y se imprime en la consola.