es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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))
Tags:  , , ,

Answer

  1. Avatar for 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:

    import base64
    from Crypto.Cipher import AES
    
    key = base64.b64decode(b"QWJjZGVmZ2hpamtsbW5vcA==")
    iv = base64.b64decode(b"AAAAAAAAAAAAAAAAAAAAAA==")
    text = b"secrettext"
    
    padtext = text + b"\0" * (AES.block_size - len(text) % AES.block_size)
    
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    result = encryptor.encrypt(padtext)
    print(base64.b64encode(result).decode("utf-8"))
    

    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.

Comments are closed.