Poiché avevo segnalato questo post di Leo72 in una discussione nel forum spagnolo:
https://gambas-es.org/showthread.php?tid=998
ho domandato a Leo72, su richiesta di un membro di quel forum, alcune informazioni circa l'uso della funzione:
ProcessHC256(InputData As Byte[], count2048 As Integer, Pp As Integer[], Qq As Integer[]) As Byte[]
presente nella Classe "clsHC256.class" da lui creata.
In particolare domanda cosa rappresentano e come e da dove si ottengono il 2°, il 3° e il 4° parametro, affinché possano essere passati appunto a questa funzione.
Leo mi ha risposto come segue:
« Per capire come funziona quella... funzione e perché si chiama in quel modo bisogna prima sapere come opera l'algoritmo in questione. L'HC256 è un cifrario a flusso (stream-cipher) che opera creando un flusso continuo di byte pseudo-casuali con il quale viene cifrato il messaggio originale.
Tecnicamente, l'HC-256 lavora con una chiave a 256 bit e con un IV (initialization vector) sempre a 256 bit. Internamente, consiste di 2 tabelle segrete P e Q generate a partire dalla chiave immessa dall'utente e composte ognuna da 1024 numeri interi a 32 bit. Ad ogni iterazione viene aggiornato 1 numero di ogni tabella: dopo 2048 iterazioni, tutti i numeri delle 2 tabelle sono stati aggiornati. Per tenere il punto uso una variabile contatore. La codifica e decofica si basano sullo stesso codice: viene generato un intero a 32 bit utilizzando una funzione di mappatura a 32 bit simile alla funzione di output del Blowfish. Alla fine del processo viene generata una funzione lineare di mascheramento a bit che è applicata per generare un intero a 32 bit di output. Utilizza anche 2 funzioni dell'SHA-256 ma sempre in abbinamento alle tabelle P e Q come fossero S-Box.
Quindi, istanziata la classe:
Dim cHC256 As New ClsHC256
Si dichiarano le variabili:
Dim KeyHC256 As New Integer[]
Dim IV As New Byte[]
Dim chiave As String Dim P As Integer[1024] Dim Q As Integer[1024]
Dim Counter2048 As Integer
bisogna inizializzare lo stato interno dell'algoritmo:
keyHC256 = cHC256.KeySetup(cv_String2Bytes(chiave), lunchiave, 256) iv.Resize(256 / 8) cHC256.IVsetup(keyhc256, iv, 256, p, q, Counter2048)
lunchiave è la lunghezza in bit (si ottiene moltiplicando la lunghezza della stringa chiave per 8 )
String2bytes sono 2 funzioncine che servono a trasformare la stringa di testo da cifrare o la chiave in un array di byte (da $00 a $ff).
Una volta fatto questo si può passare a codificare i dati:
String temp = cv_Bytes2String(cHC256.ProcessHC256(cv_String2Bytes(stringa_temp), Counter2048, p, q))
Anche quim bytes2string è una funzioncina che ritrasforma l'array di byte in una stringa. »