Autore Topic: [RISOLTO] SHA-256  (Letto 8846 volte)

Offline swsooue

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Re: SHA-256
« Risposta #15 il: 30 Luglio 2010, 09:56:53 »

Grazie a tutti per le risposte, siete stati chiarissimi, e avete confermato le idee che mi ero fatto in proposito.

L'idea di usare la SHELL non mi era piaciuta fin dall'inizio, proprio perchè pensavo potesse avere gli stessi problemi della SHELL di Visual Basic (VB).

Nel mio programma in VB ho dovuto scrivere una DLL in C++ proprio per poter fare il calcolo della SHA in modo veloce, dato che il sorgente in VB che avevo trovato per calcolare la SHA256 non offriva grosse prestazioni.

Dato che ho il sorgente della libreria DLL scritta in C++ (anzi a dire la verità è codice C puro) sarebbe possibile compilarlo con CodeBlocks in ambiente Linux (io uso Ubuntu) e poi chiamarlo direttamente tramite Gambas ??

In questo modo in teoria farei la stessa cosa che ho fatto in VB, per cui le prestazioni dovrebbero essere molto migliori.

Essendo proprio a digiuno di Linux, chiedo come si chiama una libreria (non credo che la libreria si chiami DLL).

Su Gambas poi penso sia sufficiente dichiararla come funzione esterna e chiamarla direttamente come un semplice SUB, giusto ??

Grazie
Gigi


Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: SHA-256
« Risposta #16 il: 30 Luglio 2010, 12:21:22 »
Non credo si possa agire su un programma esterno con Gambas, se questo non è costruito secondo le regole definite dal creatore del linguaggio.
Al più, puoi chiamarla sempre tramite SHELL, passandogli facilmente tutti i parametri che desideri, e il ritorno idem come sopra.

Non sò cosa vuoi fare, però una chiamata ad una DLL, piuttosto che al s.o., come tempi siamo allo stesso livello. L'unico collo di bottiglia sarebbe una serie di chiamate continue alla funzione esterna, che una DLL, in quanto già caricata in memoria alla prima chiamata, risponderebbe in modo più veloce.
Le possibilità per ovviare a questo sarebbero numerose, ma dipende da cosa vuoi fare.
Tanto per fare degli esempi:
- se devi codificare più stringhe nello stesso tempo, forse ti converrebbe costruirti uno scriptino esterno, anche tramite gambas (cosa abbastanza semplice da fare), che raccolga tutte queste stringhe e le passasse alla routine esterna tramite un loop (sempre nello script)
- alternativa potrebbe essere quella che il programma esterno (in C o altro linguaggio), si occupasse di leggere e codificare in loop tutte le stringhe, magari lette in blocco da un file di testo (sempre scritto da gambas).
- altre...


Offline swsooue

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Re: SHA-256
« Risposta #17 il: 30 Luglio 2010, 21:14:59 »

RISOLTO !!!!

Ho realizzato una libreria in C++, e da Gambas basta chiamarla usando prima la definizione EXTERN e poi viene chiamata semplicemente usando il nome della funzione.

Era proprio quello che cercavo.

Ciao e grazie a tutti dell'aiuto

Gigi

Offline ealmuno

  • Maestro Gambero
  • ****
  • Post: 388
    • Mostra profilo
    • http://www.ealmuno.com
Re: SHA-256
« Risposta #18 il: 30 Luglio 2010, 21:27:16 »
bene, metti risolto nel titolo del primo post
il mio nuovo sito : ealmuno.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: SHA-256
« Risposta #19 il: 31 Luglio 2010, 13:02:09 »

RISOLTO !!!!

Ho realizzato una libreria in C++, e da Gambas basta chiamarla usando prima la definizione EXTERN e poi viene chiamata semplicemente usando il nome della funzione.

Era proprio quello che cercavo.

Ciao e grazie a tutti dell'aiuto

Gigi


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?

Offline swsooue

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Re: SHA-256
« Risposta #20 il: 31 Luglio 2010, 18:41:26 »
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?

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

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: SHA-256
« Risposta #21 il: 31 Luglio 2010, 18:47:38 »
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?

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


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....

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: [RISOLTO] SHA-256
« Risposta #22 il: 01 Agosto 2010, 10:27:10 »
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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[RISOLTO] SHA-256
« Risposta #23 il: 03 Dicembre 2022, 22:33:07 »
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: [Seleziona]
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:


Codice: [Seleziona]
Dim cHC256 As New ClsHC256

Si dichiarano le variabili:

Codice: [Seleziona]
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:

Codice: [Seleziona]
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:


Codice: [Seleziona]
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. »
« Ultima modifica: 24 Maggio 2023, 08:31:17 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »