Salve a tutti!
Vorrei unire una serie di variabili in una String per poi firmarle con MD5. Tra le variabili ci sono dei dati uint64_t e non riesco a convertirli in String.
Ciao, grazie per la risposta!
Diciamo che il valore MD5 fa parte di una Struct. Infatti sarebbe l'hash del resto della Struct.
Se dai un'occhiata all'altro topic che ho postato, il valore Data1 = "c5390e6ad642d182fe46e36c226589ff" sarebbe appunto l'MD5 del RESTO della struct. Ovviamente c5390e6ad642d182fe46e36c226589ff in quel caso non lo è altrimenti non avrei chiesto.
RobertoBochet:
Un checksum a 8bit è troppo poco sicuro per i tuoi gusti? Un hash è impegnativo come calcolo
Beh diciamo che un MD5 è meglio... Anche se non è poi un gran che neppure quello dal punto di vista crittografico.
gpb01:
... scusa ma non capisco questa tua frase ... cosa "non lo è" ? o meglio non è cosa ?
Innanzitutto grazie per la risposta. Intendevo dire che quel valore (facendo riferimento all'altro post) non è l'md5 dei valori successivi dello Struct. È invece l'MD5 di una stringe casuale che non ricordo dove ho preso. È solo un esempio insomma.
gpb01:
Inoltre ... se vuoi accedere ad una variabile in due modi diversi (uint64_t e array di byte) ti basa usare una union.
Guglielmo
Mi pare che quella libreria voglia una String come input per elaborare l'hash. Quindi il mio obbiettivo è quello di comporre una String con tutti i dati che voglio hashare (ovvero tutte le altre variabili della Struct, tranne ovviamente la prima che deve essere appunto l'MD5). Il mio problema è appunto convertire quel benedetto uint64_t in una String da poter concatenare a quella finale. In pratica:
gpb01:
... una domanda a latere ... su che Arduino fai girare il tutto ?
Guglielmo
Uno.... Per la precisione solo l'ATMEGA328p con forse l'XTAL esterno.... Ma direi di si senno è rincoglionito.. L'AES lo regge bene, in pochi ms mi fa un CBC 256b.... Penso che per un MD5 non ci siano problemi... Penso...
... i problemi sono nell'uso dell'allocazione dinamica della memoria e nel uso della classe String che, anche essa alloca dinamicamente la memoria.
Sei su una piccola MCU, con soli 2KB di SRAM, non hai un sistema operativo e non hai un "garbage collector" ... per cui ... in un attimo e la SRAM finisce ed il tuo programma impazzisce ... ed anche tu per capire il perché.
Per quanto possibile, su Arduino, evita tutto ciò che alloca dinamicamente la memoria, perché poi, diagnosticare i problemi, può diventare un incubo.
Per le stringhe impara ad usare le stringhe classiche del C (array di char) ed evita di usare la classe String.
Il tutto è stato detto e ripetuto centinaia di volte su questo forum ... basta fare un po' di ricerche
md5 non è un sistema di cifratura a due vie! è un hash e si usa come sistema di controllo. Quindi la tua affermazione ha poco senso, cosa te ne devi dare del hash md5 della struct?
Come suggerisce Guglielmo la union ti renderebbe tutto più semplice, basta aggiungere un char farlocco alla fine della struct contenente '\0'
Anche a me il tutto sembra pesantino, come hai verificato il tempo di calcolo dell'AES?
gpb01:
Per le stringhe impara ad usare le stringhe classiche del C (array di char) ed evita di usare la classe String.
Ottimo. Mi informerò a riguardo. Grazie mille per il supporto!
RobertoBochet:
md5 non è un sistema di cifratura a due vie! è un hash e si usa come sistema di controllo. Quindi la tua affermazione ha poco senso, cosa te ne devi dare del hash md5 della struct?
Come suggerisce Guglielmo la union ti renderebbe tutto più semplice, basta aggiungere un char farlocco alla fine della struct contenente '\0'
Anche a me il tutto sembra pesantino, come hai verificato il tempo di calcolo dell'AES?
Infatti lo uso come sistema di controllo di integrità del contenuto del pacchetto cifrato oltre al CRC dell'RF24.