01-11-2020, 04:06
Witam.
Na wstępie powiem tylko że programuję praktycznie we wszystkim poza C i C++, nie jestem przezwyczajony do niskiego poziomu i nie mam zielonego pojęcia co tu się dzieje, po 3 dniach się poddałem i proszę o pomoc ;/
Mam taki kod:
Funkcja formatToHex:
Kod (w sumie pierwsza połowa) ma za zadanie wyliczyć hash słowa "qwer" i to działa jako-tako.
Po hashu na serial monitorze pokazuje mi się kilka artefaktów:
Ale sam hash jest poprawny.
Gdy dorzucę niżej drugi blok z hashowaniem kolejnego słowa "asdf" to teoretycznie pod tym hashem powinien się pojawić kolejny, tym razem słowa "asdf" czyli powinno być tak:
Czyli zupełnie jakby zmienna hashStr łączyła się ze zmienną hashStr2. Bez sensu...
Funkcja SHA256 jest w pełni sprawna, bo gdy zrobię tak:
To wszystko wyświetla się poprawnie. 2 hashe w osobnych linijkach bez żadnych artefaktów.
Może mi ktoś naprostować co robię źle?
Jeszcze co do tych artefaktów to rpzecież mam matrycę char która ma 64 pozycje i te 64 pozycje są wypełnione, więc skąd do h biorą się te artefakty...?
Dzięki za wasz czas
Na wstępie powiem tylko że programuję praktycznie we wszystkim poza C i C++, nie jestem przezwyczajony do niskiego poziomu i nie mam zielonego pojęcia co tu się dzieje, po 3 dniach się poddałem i proszę o pomoc ;/
Mam taki kod:
Cytat: Sha256.init();
Sha256.print("qwer");
uint8_t* hash = Sha256.result();
char hashStr[64];
formatToHEX(hash, hashStr);
Serial.println(String(hashStr));
Sha256.init();
Sha256.print("asdf");
uint8_t* hash2 = Sha256.result();
char hashStr2[64];
formatToHEX(hash2, hashStr2);
Serial.println(String(hashStr2));
Funkcja formatToHex:
Cytat:void formatToHEX(uint8_t* hash, char* chars) {
uint8_t t = 0;
for (int i = 0; i < 32; i++) {
chars[t] = (char)pgm_read_byte(hexMap + (hash[i] >> 4));
t++;
chars[t] = (char)pgm_read_byte(hexMap + (hash[i] & 0xf));
t++;
}
}
Kod (w sumie pierwsza połowa) ma za zadanie wyliczyć hash słowa "qwer" i to działa jako-tako.
Po hashu na serial monitorze pokazuje mi się kilka artefaktów:
Cytat:f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3 ⸮ 3 N N ⸮ ypowinno być:
Cytat:f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3
Ale sam hash jest poprawny.
Gdy dorzucę niżej drugi blok z hashowaniem kolejnego słowa "asdf" to teoretycznie pod tym hashem powinien się pojawić kolejny, tym razem słowa "asdf" czyli powinno być tak:
Cytat:f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13ba jest tak:
f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3
Cytat:f6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3 ⸮ 3 N N ⸮ y
f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13bf6f2ea8f45d8a057c9566a33f99474da2e5c6a6604d736121650e2730c6fb0a3
Czyli zupełnie jakby zmienna hashStr łączyła się ze zmienną hashStr2. Bez sensu...
Funkcja SHA256 jest w pełni sprawna, bo gdy zrobię tak:
Cytat: Sha256.init();
Sha256.print("qwer");
uint8_t* hash = Sha256.result();
for (int i = 0; i < 32; i++) {
Serial.print((char)pgm_read_byte(hexMap + (hash[i] >> 4)));
Serial.print((char)pgm_read_byte(hexMap + (hash[i] & 0xf)));
}
Sha256.init();
Sha256.print("asdf");
uint8_t* hash2 = Sha256.result();
for (int i = 0; i < 32; i++) {
Serial.print((char)pgm_read_byte(hexMap + (hash2[i] >> 4)));
Serial.print((char)pgm_read_byte(hexMap + (hash2[i] & 0xf)));
}
To wszystko wyświetla się poprawnie. 2 hashe w osobnych linijkach bez żadnych artefaktów.
Może mi ktoś naprostować co robię źle?
Jeszcze co do tych artefaktów to rpzecież mam matrycę char która ma 64 pozycje i te 64 pozycje są wypełnione, więc skąd do h biorą się te artefakty...?
Dzięki za wasz czas