Python3 Base64 Código PyDes 3DES Objeto

Hola Estoy tratando de crear una función por la cual un token es generado por el servidor que utiliza 3DES que es entonces Base64 codificado y enviado a una aplicación cliente.

Estoy tratando de usar pyDes para encriptar la cadena usando una clave y luego base64 codifica ese valor a enviar.

He tratado de lanzar el objeto a bytes, Strings, etc. pero acabo de obtener varios errores, similar a abajo.

¿Es lo que estoy tratando de hacer incluso factible o estoy bajando un agujero de conejo con esta solución?

import pyDes
import base64
key1 = b"abcdefghijklmnopqrstuvwx"
data = bytes("messagepart1" + "messagepart2", encoding='utf8')
k = pyDes.triple_des(key1, pyDes.ECB, b"\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
# e = k.decrypt(data)
print(base64.b64encode(bytes(k)))

Error:

python3 triple_des.py 
Traceback (most recent call last):
  File "triple_des.py", line 7, in 
    print(base64.b64encode(bytes(k)))
TypeError: cannot convert 'triple_des' object to bytes

Pregunta hecha hace 3 años, 4 meses, 26 días - Por syntaxsculptor


2 Respuestas:

  • El error que estás viendo se debe a que estás intentando convertir directamente un objeto de tipo pyDes.triple_des a bytes, lo cual no es posible en Python.

    Para corregir este error y lograr tu objetivo de encriptar un mensaje con 3DES y luego codificarlo en Base64, puedes hacerlo de la siguiente manera:

    python
    import pyDes
    import base64
    
    

    Definir la clave de encriptación

    key1 = b"abcdefghijklmnopqrstuvwx"

    Definir el mensaje a encriptar

    data = bytes("messagepart1" + "messagepart2", encoding='utf-8')

    Crear el objeto de triple DES

    k = pyDes.triple_des(key1, pyDes.ECB, b"\0\0\0\0\0\0\0\0")

    Encriptar el mensaje

    encrypted_data = k.encrypt(data)

    Codificar el mensaje encriptado en Base64

    encoded_data = base64.b64encode(encrypted_data) print(encoded_data)

    Con esto, el mensaje se encriptará usando Triple DES y luego se codificará en Base64 antes de ser enviado al cliente. Asegúrate de que tanto el servidor como el cliente estén configurados para manejar la encriptación y decodificación adecuadamente.

    Respondida el Dec 21, 2020 a las 22:39 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error indica que estás intentando convertir un objeto triple_des en bytes, lo cual no es posible. Para resolver este problema, debes encriptar los datos primero usando el objeto triple_des y luego convertir el resultado cifrado en bytes. Aquí tienes el código corregido:

    python
    import pyDes
    import base64
    
    key1 = b"abcdefghijklmnopqrstuvwx"
    data = bytes("messagepart1" + "messagepart2", encoding='utf-8')
    k = pyDes.triple_des(key1, pyDes.ECB, b"\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
    encrypted = k.encrypt(data)
    encoded = base64.b64encode(encrypted)
    print(encoded)
    

    Este código primero encripta los datos usando el objeto triple_des y luego convierte el resultado cifrado en bytes. El valor codificado en base64 resultante se imprime en la consola.

    Respondida el Dec 21, 2020 a las 22:49 - por Gemini

    Votos positivos: 0 | Votos negativos: 0