Porównanie funkcji SHA AlgorytmRozmiar skrótu(bity)Rozmiar stanu(bity)Rozmiar bloku(bity)Maks. rozmiardanych (bity)Rozmiar słowa(bity)Liczba krokówOperacjeZnalezione kolizje SHA-0 160 160 512 264 – 1 32 80 +,and,or,xor, rot Tak SHA-1 Tak (251)Classification and Generation of Disturbance Vectors for Collision Attacks against SHA-1. SHA-2 SHA-256/224 256/224 256 512 264 – 1 32 64 +,and,or,xor, shr, rot Nie SHA-512/384 512/384 512 1024 2128 – 1 64 80

Pseudokod Wartości początkowe: h0 := 0x67452301 h1 := 0xEFCDAB89 h2 := 0x98BADCFE h3 := 0x10325476 h4 := 0xC3D2E1F0

Przetwarzanie wstępne: dopisz '1' do wiadomości; dopisz k '0', gdzie 0 ⩽ k < 512 jest liczbą taką, że wynikowa długość wiadomości jest kongruentna do 448 modulo 512; dopisz długość wiadomości w bitach (przed wypełnieniem) jako 64-bitową liczbę całkowitą zakodowaną big endian.

Przetwarzaj wiadomość 512-bitowymi porcjami: podziel wiadomość na 512-bitowe porcje

for (każda porcja) podziel porcję na 16 32-bitowych słów kodowanych big-endian w(i), 0 ⩽ i ⩽ 15

Rozszerz 16 32-bitowych słów w 80 32-bitowych słów: for i from 16 to 79 w(i) := (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16)) <<< 1

Zainicjuj zmienne dla tej porcji: a := h0 b := h1 c := h2 d := h3 e := h4

Główna pętla: for i from 0 to 79 if 0 i ⩽ 19 then f := (b and c) or ((not