b) and d) k := 0x5A827999 else if 20 ⩽ i ⩽ 39 f := b xor c xor d k := 0x6ED9EBA1 else if 40 ⩽ i ⩽ 59 f := (b and c) or (b and d) or (c and d) k := 0x8F1BBCDC else if 60 ⩽ i ⩽ 79 f := b xor c xor d k := 0xCA62C1D6

temp := (a <<< 5) + f + e + k + w(i) e := d d := c c := b <<< 30 b := a a := temp

Dodaj skrót tej porcji do dotychczasowego wyniku: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e

Wytwórz ostateczną wartość skrótu (zakodowaną big-endian): skrót = h0 dopisz h1 dopisz h2 dopisz h3 dopisz h4

Jedyna różnica pomiędzy algorytmami SHA-0 i SHA-1 występuje w drugim kroku algorytmu i polega na nieobecności w SHA-0 1-bitowego przesunięcia (obrotu), tzn.:

SHA-1: w(i) := (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16)) <<< 1

SHA-0: w(i) := (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16))

Ataki W 2004 zgłoszono udane ataki na funkcje skrótu mające strukturę podobną do SHA-1, co podniosło kwestię długotrwałego bezpieczeństwa SHA-1.

Pomiędzy rokiem 2005 a 2008 opublikowano szereg ataków zarówno na uproszczoną wersję SHA-1, jak i na pełną.