SECURE HASH ALGORITHM (SHA)
В 1993 году Национальный институт стандартов и технологий (NIST) США совместно с Агентством национальной безопасности США выпустил "Стандарт стойкой хэш-функции" (Secure Hash Standard), частью которого и является алгоритм SHA. Предложенная процедура вырабатывает хэш-код длиной 160 битов для произвольного текста длиной менее  битов. Разработчики считают, что для SHA невозможно предложить алгоритм, имеющий разумную трудоемкость, который строил бы два различных сообщения, дающих один и тот же хэш-код. SHA основан на тех же самых принципах, которые использовал Ривест при разработке MD4, более того, алгоритмическая структура SHA очень похожа на структуру MD4. 
Процедура дополнения хэшируемого текста до кратного 512 битам полностью совпадает с процедурой дополнения алгоритма MD5. 
Инициализируются 5 переменных по 32 бита (в алгоритме MD5 таких переменных было 4): 

Далее, аналогично MD5, создаются копии , , , , инициализированных переменных и для каждого блока текста размером 512 битов выполняется основной цикл, состоящий из 4 раундов. В отличие от MD5 каждый раунд состоит из 20 операторов (в MD5 -- 16 операторов). 
Аналогично MD5, каждый оператор состоит из функции от 3 переменных (в случае SHA это , и ), циклического сдвига и суммирования. Набор используемых в SHA функций выглядит следующим образом. 
В первом раунде () действует функция . 
Во втором раунде ( ) действует функция . 
В третьем раунде ( ) действует функция . 
В четвертом раунде ( ) действует функция . 
Здесь и далее обозначает номер оператора в основном цикле. Для каждого раунда определена одна константа, которая суммируется с очередным подблоком: 
в первом раунде ():	    	;	
во втором раунде ( ):	    	;	
в третьем раунде ( ):	    	;	
в четвертом раунде ( ):	    	.	
В начале основного цикла блок хэшируемого текста расширяется до 80 слов по 32 бита по правилу: для слово совпадает с -тым подблоком исходного блока; для полагают , где  -- промежуточные значения слов. 
Каждый из 80 операторов основного цикла имеет следующий вид: 
TEMP; 
; 
; 
; 
TEMP; 
Здесь, как и прежде, символ "" обозначает циклический сдвиг. Основной цикл завершается суммированием , , , , и , , , , . Выходом алгоритма является конкатенация , , , , . 

Известные результаты анализа

SHA скорее является модификацией MD4, нежели новой разработкой. В отличие от Ривеста, который аргументирует вносимые им изменения в MD4 при разработке MD5, авторы SHA такой аргументации не приводят. Ниже сравниваются изменения MD4, внесенные Ривестом при разработке MD5, и изменения, внесенные в MD4 при разработке SHA. 

1. Как в MD5, так и в SHA, добавлен 4-й раунд. Однако, в SHA в 4-м раунде используется та же самая функция, что и во 2-м раунде (в MD5 функции различны). 
2. SHA наследует от MD4 принцип использования в каждом операторе одного раунда одной аддитивной константы (в MD5 константа каждого оператора уникальна). 
3. Функция второго раунда в MD5 изменена с целью сделать ее менее симметричной, а SHA использует ту же функцию, что и в MD4. 
4. Как в SHA, так и в MD5, результат каждого шага суммируется с результатом предыдущих шагов, что позволяет усилить эффект распространения ошибки. Однако, в SHA добавлена 5-я переменная по которой идет "зацепление", что приводит к тому, что метод ден Бура -- Босселэра, эффективный для MD5, перестает работать в случае SHA. 
5. В отличие от MD5, в котором изменен порядок считывания слов во втором и третьем раундах для того, чтобы они меньше походили друг на друга, в SHA входные слова считываются в соответствии с правилом, получаемым на основе кода, исправляющего ошибки. 
6. Если в MD5 величина циклического сдвига различается от раунда к раунду и от оператора к оператору, то SHA использует постоянные циклические сдвиги. Как и в MD4, величины этих сдвигов взаимно просты с длиной слова.