Hallo Zusammen,
sorry vorab für meine Unwissenheit zum Thema Datentypen.
Ich möchte einen SHA256 Hash erzeugen aus der MAC des MKR1000 und einem Addword.
Klingt an sich nicht aufregend. Aber ...
Was hab ich:
#include <sha256.h>
WiFi.macAddress(mac); // byte array : 6 bytes representing the MAC address
BYTE addword[] = "XXXXXXXXXX";
BYTE hashtext[] = mac + addword; ----> hier stehe ich auf dem Schlauch !! (** FM weiter unten...
my_hash = get_sha256(hashtext);
my_hash.toLowerCase();
Aktuell erhalte ich die FM:
invalid operands of types 'byte [ 0 ] {aka unsigned char [ 0 ]}' and 'BYTE [11] {aka unsigned char [11]}' to binary 'operator+'
String get_sha256(BYTE text[]) {
BYTE hash[SHA256_BLOCK_SIZE];
char texthash[2 * SHA256_BLOCK_SIZE + 1];
Sha256* sha256Instance = new Sha256();
sha256Instance->update(text, strlen((const char*)text));
sha256Instance->final(hash);
for (int i = 0; i < SHA256_BLOCK_SIZE; ++i)
sprintf(texthash + 2 * i, "%02X", hash[i]);
delete sha256Instance;
return String(texthash);
}
Hat jemand einen Tipp für mich um mir auf die Sprünge zu helfen?
Lieben vielen Dank vorab!
Grüße Marco
Schau Dir mal C/C++-Zeichenketten aka char-Arrays an.
Gruß Tommy
Vielen Dank!
Ich habe die Seite von Tommy genau angeschaut jedoch komme ich dennoch nicht auf eine Lösung.
Irgendwie sehe ich hier nichts was mit meinem Beispiel zusammenpasst.
Sorry
Grüße Marco
Was für ein Typ soll BYTE sein? Ich kenne nur byte.
Entweder mac in ein char-Array mit 0-Terminierung umwandeln und dann strcpy und strcat nutzen oder alles byteweise über Schleifen zusammensetzen.
- ist für Byte/Char-Arrays nicht definiert.
Gruß Tommy
Hi,
wenn ich es in etwas anderes umwandle kommt bei sha256Instance->update... eine Fehlermeldung:
invalid conversion from 'char*' to 'const BYTE* {aka const unsigned char*}' [-fpermissive]
Grüße Marco
Gib uns doch mal einen Link zu Deiner Lib.
Gruß Tommy
Warum der das BYTE redefiniert hat, muss man nicht verstehen.
Versuche doch mal einen expliziten Typecast
...update((const BYTE *)text,...);
Gruß Tommy
Ha !!
Super das hat geklappt.
Hier jetzt die Lösung die funktioniert.
#include <sha256.h>
BYTE hash[SHA256_BLOCK_SIZE];
char texthash[2 * SHA256_BLOCK_SIZE + 1];
void setup() {
Serial.begin(115200);
delay(2000);
// fiktiver wert
String text1 = "MA-CC-AA-DR-EE-SS";
text1.c_str();
// fiktiver wert
text1.concat("ADDWORD");
int str_len = text1.length() + 1;
char text2[str_len];
text1.toCharArray(text2, str_len);
Serial.println(text2);
sha(text2);
}
char* sha(char* text) {
Sha256* sha256Instance = new Sha256();
sha256Instance->update((const BYTE *)text, strlen((const char*)text));
sha256Instance->final(hash);
for (int i = 0; i < SHA256_BLOCK_SIZE; ++i)
sprintf(texthash + 2 * i, "%02X", hash[i]);
Serial.println(texthash);
delete sha256Instance;
};
void loop() {
}
Ich erhalte hiermit einen korrekten Hash aus einem String und einem Addword.
Vielen vielen Dank nochmal !!!
Grüße Marco
Etwas von hinten durch die Brust ins Auge, aber wenn es funktioniert, hast Du Dein Ziel ja erreicht.
Die Sha256-Lib ist in meinen Augen nicht sauber programmiert. Wenn der Autor in seinen Beispielen schon explizite Typecasts machen muss, ist in meinen Augen was faul.
Gruß Tommy