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.

Array de unsigned char a string

En mi búsqueda de una biblioteca de encriptación de encabezados única para C++, encontré este repositorio de GitHub que utiliza AES con el modo CBC para encriptar una std::string en un vector de unsigned char en el ejemplo proporcionado en el repositorio.

“`c++
const unsigned char iv[16] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
};

<pre><code><br />Se utilizó este vector de inicialización para los datos encriptados, los cuales están listos para ser enviados a la API con el endpoint /data que acepta datos en formato JSON.

“`json
{
“data”: “encrypted-data”
}

y los desencripta para usarlos más adelante.

El servidor donde se envían los datos está escrito en Python y utiliza las siguientes líneas para desencriptar los datos:

obj2 = AES.new('EncryptionKey128'.encode("utf8"), AES.MODE_CBC, 'This is an IV456'.encode("utf8"))
result = obj2.decrypt(phrase)
print(result)

¿Cómo convertir el vector de inicialización en una cadena para usar en el servidor?

He intentado recorrer los elementos de la lista:

lst = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
        0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]
for item in lst:
    item = item.replace('0x', '')
    bytes_object = bytes.fromhex(item)
    ascii_string = bytes_object.decode("utf-8")

pero esto crea un vector de inicialización que tiene más de 16 caracteres.

El objetivo detrás de esto es encriptar una cadena con AES y enviarla a un servidor de Python para ser desencriptada. Para este ejemplo, ambas claves estarán codificadas en el servidor y en el cliente.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para convertir el Vector de Inicialización (IV) en una cadena de texto para su uso en el lado del servidor, puedes utilizar el siguiente código:

    iv_str = ''.join([chr(i) for i in iv])
    

    Este código convertirá el arreglo iv de tipo unsigned char en una cadena de caracteres en Python. El resultado de iv_str puede ser utilizado en el código del servidor Python para descifrar los datos enviados por el cliente C++.

    Alternativamente, puedes convertir el arreglo iv de tipo unsigned char en una cadena de texto hexadecimal utilizando el siguiente código:

    iv_hex = ''.join(['{:02x}'.format(i) for i in iv])
    

    Este código convertirá cada byte en el arreglo iv en una cadena hexadecimal de dos dígitos y los unirá. El resultado de iv_hex puede ser utilizado en el código del servidor Python si prefieres utilizar una representación hexadecimal del IV.

Comments are closed.