(05-11-2022, 15:44)vuott escribió: Recibí la respuesta del autor de esa clase "clsHC256.class".
La pego aquí en el idioma original (italiano).
Gracias Vuott. Pongo aquí la traducción que hice por si a alguien le viene mejor.
Para entender cómo funciona esa función y por qué se llama así, primero hay que saber cómo opera el algoritmo en cuestión.
El HC256 es un cifrado de flujo que funciona creando un flujo continuo de bytes pseudoaleatorios con los que se cifra el mensaje original.
Técnicamente, el HC-256 funciona con una clave de 256 bits y un IV (vector de inicialización) de 256 bits. Internamente, consta de 2 tablas secretas P y Q generadas a partir de la clave introducida por el usuario y cada una compuesta por 1024 enteros de 32 bits. En cada iteración, se actualiza 1 número de cada tabla: después de 2048 iteraciones, se han actualizado todos los números de las 2 tablas. Para mantener el punto utilizo una variable de contador.
La codificación y la descodificación se basan en el mismo código: se genera un entero de 32 bits mediante una función de mapeo de 32 bits similar a la función de salida de Blowfish.
Al final del proceso, se genera una función lineal de enmascaramiento de bits y se aplica para generar un entero de salida de 32 bits.
También utiliza 2 funciones de SHA-256 pero siempre en conjunto con las tablas P y Q como si fueran S-Boxes.
A continuación, instancie la clase:
Código:
Se declaran las variables:
[code]
Dim IV As New Byte[]
Dim chiave As String
Dim P As Integer[1024]
Dim Q As Integer[1024]
Dim Counter2048 As Integer
el estado interno del algoritmo debe ser inicializado:
[code]
"lunchiave" (longitud) es la longitud en bits (se obtiene multiplicando la longitud de la cadena de claves por 8)
"String2bytes" son 2 funciones que se utilizan para transformar la cadena de texto a cifrar o la clave en una matriz de bytes (&00 a &ff).
Una vez hecho esto, se puede pasar a codificar los datos:
[code]
De nuevo, 'bytes2string' es una función que transforma la matriz de bytes de nuevo en una cadena.