Механизм действия S-блоков

Преобразование, с помощью которого 48-разрядный блок преобразуется в 32-разрядный, сводится к выборке восьми тетрад из 8 таблиц (S-блоков)размером 4 ´ 16 (табл. 18.7). Из каждого S-блока выбирается одна тетрада. Для этого 48-разрядныйблок делится последовательно на 8 комбинаций по 6 бит каждая. Первая комбинация (слева) является входом в первый S-блок, вторая — во второй и т.д. При этом первый и последний биты комбинациизадают номер строки, а остальные 4 бита — номер столбца S-блока, на пересечении которых расположена соответствующая тетрада. Конкретные значения Si (i = 1, …, 8)представлены в табл. 18.7.

Таблица 18.7. Таблицы S -блоков для DES

S1                                
                                 
                                 
                                 
                                 
                                 
S2                                
                                 
                                 
                                 
                                 
                                 
S3                                
                                 
                                 
                                 
                                 
                                 
S4                                
                                 
                                 
                                 
                                 
                                 
S5                                
                                 
                                 
                                 
                                 
                                 
S6                                
                                 
                                 
                                 
                                 

Окончание таблицы 18.7

S7                                
                                 
                                 
                                 
                                 
                                 
S8                                
                                 
                                 
                                 
                                 

Пример реализации алгоритма DES представлен в листингах 18.3 и 18.4 (компилятор — PowerBasic).

Листинг 18.3. Пример реализации
алгоритма DES на языке Basic для шифрования файлов

$CPU 80386
$FLOAT NPX
$OPTIMIZE SPEED
$LIB ALL-
$OPTION CNTLBREAK ON

DECLARE FUNCTION MYBIN$ (n%)

DECLARE FUNCTION desalg$ (a$)

DECLARE SUB f (i%, a%(), x%())
DECLARE SUB transpose (datax%(), T%(), n%)
DECLARE SUB mrotate (keyx%())

DECLARE SUB stob (a$, mbits%())
DECLARE SUB btos (mbits%(), a$)
DECLARE SUB letbe (target%(), source%(), LAST%)
DECLARE SUB init (x() AS INTEGER, n%)
DECLARE SUB sboxinit (b() AS INTEGER)

DECLARE SUB xtob (a$, mbits%())

DIM s(1 TO 8, 1 TO 64) AS shared INTEGER

Продолжение листинга 18.3

' Инициализация

RESTORE InitialTrl
DIM InitialTr(1 TO 64) AS shared INTEGER
init InitialTr(), 64

RESTORE FinalTrl
DIM FinalTr(1 TO 64) AS shared INTEGER
init FinalTr(), 64

RESTORE swappyl
DIM swappy(1 TO 64) AS shared INTEGER
init swappy(), 64

RESTORE KeyTr1l
DIM KeyTr1(1 TO 56) AS shared INTEGER
init KeyTr1(), 56

RESTORE KeyTr2l
DIM KeyTr2(1 TO 48) AS shared INTEGER
init KeyTr2(), 48

RESTORE etrl
DIM etr(1 TO 48) AS shared INTEGER
init etr(), 48

RESTORE ptrl
DIM ptr(1 TO 32) AS shared INTEGER
init ptr(), 32

sboxinit s()

RESTORE rotsl
DIM rots(1 TO 16) AS shared INTEGER
init rots(), 16

DIM XR(1 TO 56) AS shared INTEGER

DIM EF(1 TO 64) AS shared INTEGER
DIM ikeyf(1 TO 64) AS shared INTEGER
DIM yf(1 TO 64) AS shared INTEGER


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: