Witam,
na wstępie przepraszam, jeżeli pomyliłem dział. Przeglądając ‘bezpieczeństwo’, stwierdziłem, że ten jednak będzie odpowiedniejszy.
Analizuję funkcję skrótu md5 i przygotowuję algorytm w języku php, lecz to akurat ma najmniejsze znaczenie.
Przeglądałem wiele opisów tej funkcji, głównie w najbardziej chyba wiarygodnym źródle a mianowicie dokumencie RFC1321, jak i m.in. w książce “Podstawy kryptografii” pana Marcina Karbowskiego, natomiast mam problem ze zrozumieniem jednej rzeczy
Czyli zakładając, że mam tekst ‘jakistekst’, jego reprezentacja bitowa wygląda następująco: 1101010110000111010111101001111001111101001100101110101111100111110100
teraz tworzymy tablicę N-elementową, gdzie N to ceil(długość bitowa wiadomości wejściowej / 512) i uzupełniamy po kolei elementy tej tablicy
1. 1101010110000111010111101001111
2. 0011111010011001011101011111001
3. 11110100
dodajemy na końcu bit o wartości ‘1’ a następnie uzupełniamy zerami. Czyli tablica wartości binarnych dla tego tekstu wygląda następująco:
1. 1101010110000111010111101001111
2. 0011111010011001011101011111001
3. 11110100[b]1[/b]0000000000000000000000
4. 0000000000000000000000000000000
5. 0000000000000000000000000000000
6. 0000000000000000000000000000000
7. 0000000000000000000000000000000
8. 0000000000000000000000000000000
9. 0000000000000000000000000000000
10. 0000000000000000000000000000000
11. 0000000000000000000000000000000
12. 0000000000000000000000000000000
13. 0000000000000000000000000000000
14. 0000000000000000000000000000000
15. 0000000000000000000000000000000
16. 0000000000000000000000000000000
Zakładając, że tablica wartości ma wynosić 448 modulo 512 a dopełnienie ostatnich 64 bitów ma być przeznaczone na informację odnośnie długości wiadomości rozumiem to w ten sposób, że jeżeli długość tej wiadomości wynosi 80 bitów (strlen(‘jakistekst’) * 8 bitów) to ta tablica (dla N=1) powinna wyglądać w taki sposób: ?
1. 1101010110000111010111101001111
2. 0011111010011001011101011111001
3. 11110100[b]1[/b]0000000000000000000000
4. 0000000000000000000000000000000
5. 0000000000000000000000000000000
6. 0000000000000000000000000000000
7. 0000000000000000000000000000000
8. 0000000000000000000000000000000
9. 0000000000000000000000000000000
10. 0000000000000000000000000000000
11. 0000000000000000000000000000000
12. 0000000000000000000000000000000
13. 0000000000000000000000000000000
14. 0000000000000000000000000000000
15. 0000000000000000000000000000000
16. 000000000000000000000000[b]1010000[/b]
Czy ta tablica wartości początkowych powinna wyglądać w taki sposób, czy jednak źle zinterpretowałem opis dotyczący tej części algorytmu?
Z góry dziękuję za odpowiedzi.
Pozdrawiam.