Функция шифрования.
Общая характеристика.
В алгоритме DES используется сравнительно простая функция шифрования. Соответствующая схема преобразования данных приведена на рисунке 3, а схема алгоритма – на рисунке 4. 

Рис. 3. Функция шифрования – схема преобразования данных.	
Рис. 4. Функция шифрования – схема алгоритма.	
На вход функции шифрования поступает 32-битовая половина шифруемого блока X, и 48-битовый ключевой элемент k (рис. 4, шаг 0). Сначала 32-битовый блок данных расширяется до 48 битов дублированием некоторых двоичных разрядов согласно приведенной ниже таблице (E, шаг 1). Затем полученный расширенный блок побитово суммируется по модулю 2 с ключевым элементом (операция "", шаг 2). Полученный в результате суммирования 48-битовый блок данных разделяется на восемь 6-битовых элементов данных, обозначенных h1,h2,…,h8 соответственно, причем h1 содержит шесть самых старших битов 48-битового блока, h2 – шесть следующих по старшинству битов и т.д., наконец, h8 – шесть самых младших битов блока. Далее каждое из значений hi преобразуется в новое 4-битовое значение ti с помощью соответствующего узла замен (Si, шаг 3). После этого полученные восемь 4-битовых элементов данных вновь объединяются в 32-битовый блок T' в том же самом порядке их старшинства (шаг 4). Наконец, в полученном 32-битовом блоке выполняется перестановка битов (P, шаг 5), заданная в приведенной ниже таблице. Результат последней операции и является выходным значением функции шифрования. 
Расширение 32-битового блока до 48 бит (E).
132	21	32	43	54	65	h1	470	4631	4530	4429	4328	4227	
74	85	96	107	118	129	h2	4128	4027	3926	3825	3724	3623	
138	149	1510	1611	1712	1813	h3	3524	3423	3322	3221	3120	3019	
1912	2013	2114	2215	2316	2417	h4	2920	2819	2718	2617	2516	2415	
2516	2617	2718	2819	2920	3021	h5	2316	2215	2114	2013	1912	1811	
3120	3221	3322	3423	3524	3625	h6	1712	1611	1510	149	138	127	
3724	3825	3926	4027	4128	4229	h7	118	107	96	85	74	63	
4328	4429	4530	4631	4732	481	h8	54	43	32	21	10	031	
Нумерация битов в оригинале DES	 	Нумерация битов в Intel x86	
Данная схема расширения просто дублирует пары битов (32-1, 4-5, 8-9,…,28-29) и может быть представлена следующим выражением: 
xi = Lo6(4i+1(X)),
где Lon(X) определено выше, а n(X) обозначает функцию, возвращающую в качестве результата свой аргумент X, циклически сдвинутый на n битов влево (в сторону старших разрядов). 
Замена в битовых группах(Si).
Замена 6-битовых блоков на 4-битовые выполняется следующим образом: каждый узел замен представляется таблицей (матрицей) размера 416, содержащей 4-битовые элементы, все элементы в каждой из строк – различные. Заменяемое 6-битовое значение разделяется на две части: из старшего и младшего битов блока составляется двухбитовое целое, принимающее значение от 0 до 3, оно используется в качестве номера строки, средние четыре бита интерпретируются как целое число в диапазоне 0..15, они задают номер столбца. Из найденной таким образом ячейки таблицы выбирается 4-битовый элемент, который и является результатом операции замены. Узлы замен алгоритма определяются следующими таблицами, в которых 4-битовые заменяющие коды для краткости приведены в десятичной системе. 
Указанный способ представления процедуры подстановки раскрывает некоторые достаточно тонкие свойства узлов замен, однако для программной реализации операция может быть описана более просто: каждый узел замены представляется в виде линейного массива (вектора) из 64 4-битовых элементов: 
Si = (si,0,si,1,si,2,…,si,63),
|si,j| = 4, si,j{0,1,2,…,15},. 
Замена состоит в простой выборке элемента массива по его индексу, в качестве которого выступает заменяемый 6-битовый элемент данных, интерпретируемый как целое от 0 до 63: 
Si(x) = si,x.
В этом случае нет необходимости проводить дополнительные манипуляции с битами, конструируя номер строки и номер столбца узла замены. Узлы замен алгоритма, представленные в форме, удобной для программной реализации, определяются следующими таблицами. 
Выходная битовая перестановка функции шифрования (P).
116	27	320	421	529	612	728	817	старший байт	3116	3025	2912	2811	273	2620	254	2415	
91	1015	1123	1226	135	1418	1531	1610	 	2331	2217	219	206	1927	1814	171	1622	
172	188	1924	2014	2132	2227	233	249	 	1530	1424	138	1218	110	105	929	823	
2519	2613	2730	286	2922	3011	314	3225	младший байт	713	619	52	426	310	221	128	07	
Нумерация битов в оригинале DES	 	Нумерация битов в Intel x86