Archivi (sola lettura) > Programmazione (Gambas 2)

[RISOLTO] SHA-256

<< < (5/5)

swsooue:

--- Citazione da: Ceskho - 31 Luglio 2010, 13:02:09 ---Siccome Extern pecca di guide e manuali, ti andrebbe di scrivere qualcosa a riguardo nel wiki per altri che si imbattono nel tuo stesso problema?

--- Termina citazione ---

Se è da dare una mano lo faccio volentieri, ma non ho idea di cosa potrei fare.
Posso eventualmente tradurre la pagina in inglese e metterci qualcosa di mio ??

Gigi

Ceskho:

--- Citazione da: swsooue - 31 Luglio 2010, 18:41:26 ---
--- Citazione da: Ceskho - 31 Luglio 2010, 13:02:09 ---Siccome Extern pecca di guide e manuali, ti andrebbe di scrivere qualcosa a riguardo nel wiki per altri che si imbattono nel tuo stesso problema?

--- Termina citazione ---

Se è da dare una mano lo faccio volentieri, ma non ho idea di cosa potrei fare.
Posso eventualmente tradurre la pagina in inglese e metterci qualcosa di mio ??

Gigi


--- Termina citazione ---

Si certo....possibilmente inserisci qualche esempio poichè così è più utile per i nuovi utenti.....registrati al wiki e crea la pagina....

Se non sai dove creare la pagina dimmelo via pm che la creo io e poi tu la riempi....

leo72:
Scusatemi se rispondo solo adesso ma sono stato in ferie.
Dunque, io ho realizzato un programma di cifratura che utilizza vari algoritmi crittografici e di hash che ho convertito personalmente da C/C++ o da VB6 in Gambas. E' stato un lavoraccio ed, ovviamente, la velocità rispetto ad un'implementazione pura in C è notevomente minore, ma l'ho fatto per pura sfida personale e per provare che con Gambas si possono affrontare anche certi progetti.


Nello specifico, la classe che allego è quella per il calcolo degli hash SHA256. E' adatta per lavorare con il mio programma per cui va "depurata" nella sua funzione pubblica SHA256 dalla parte di codice che gestisce la finestrina di popup che mostra l'avanzamento del processo di calcolo e va poi adattata per poter gestire anche stringhe dato che ora accetta in input un file. Ma sono tutte cose relativamente facili da fare.

vuott:
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:

--- Codice: ---
ProcessHC256(InputData As Byte[], count2048 As Integer, Pp As Integer[], Qq As Integer[]) As Byte[]
--- Termina codice ---
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:


--- Codice: ---
Dim cHC256 As New ClsHC256
--- Termina codice ---

Si dichiarano le variabili:


--- Codice: ---
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

--- Termina codice ---
bisogna inizializzare lo stato interno dell'algoritmo:


--- Codice: ---
keyHC256 = cHC256.KeySetup(cv_String2Bytes(chiave), lunchiave, 256) iv.Resize(256 / 8) cHC256.IVsetup(keyhc256, iv, 256, p, q, Counter2048)
--- Termina codice ---
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:


--- Codice: ---
String temp = cv_Bytes2String(cHC256.ProcessHC256(cv_String2Bytes(stringa_temp), Counter2048, p, q))
--- Termina codice ---

Anche quim bytes2string è una funzioncina che ritrasforma l'array di byte in una stringa. »

Navigazione

[0] Indice dei post

[*] Pagina precedente

Vai alla versione completa