Vhodni podatki (16 heksadecimalnih znakov):
Vhodni podatki v dvojiškem zapisu:
Začetna permutacija
Skrivni ključ (16 heksadecimalnih znakov):
Skrivni ključ v binarnem zapisu:
Generator delnih ključev
Feistel
Končna permutacija
Izhodni podatki v binarnem zapisu
Izhodni podatki (16 heksadecimalnih znakov)
Feistel funkcija ← Nazaj na DES shemo
Vhodni podatki:
E
Delni ključ:
S1
S2
S3
S4
S5
S6
S7
S8
P
Začetna permutacija ← Nazaj na DES shemo
Pomakni miško na celico, da vidiš na katero mesto se preslika.
Začetna permutacija je definirana v standardu in nima velikega kriptografskega pomena saj lahko napadalec enostavno izračuna njen inverz. DES je bil ustvarjen leta 1975, ko je večina računalnikov bila 8 bitnih, nalaganje 64 bitnega bloka po 8 bitnih besedah pa je v takši arhitekturi privedla to križanja bitov kot ga vidimo na shemi. Da se jim ne bi bilo treba ukvarjati s problemom popravljanja podatkov so permutacijo inžinirji enostavno vključili v standard.
01020304 05060708
09101112 13141516
17181920 21222324
25262728 29303132
33343536 37383940
41424344 45464748
49505152 53545556
57585960 61626364
58504234 26181002
60524436 28201204
62544638 30221406
64564840 32241608
57494133 25170901
59514335 27191103
61534537 29211305
63554739 31231507
Končna permutacija ← Nazaj na DES shemo
Pomakni miško na celico, da vidiš na katero mesto se preslika.
Končna permutacija je samo inverz začetne permutacije. Tako kot prva pomaga pri prenosu 64 bitnega bloka po 8 bitnih kosih.
01020304 05060708
09101112 13141516
17181920 21222324
25262728 29303132
33343536 37383940
41424344 45464748
49505152 53545556
57585960 61626364
40084816 56246432
38074715 55236331
38064614 54226230
37054513 53216129
36044412 52206028
35034311 51195927
34024210 50185826
33014109 49175725
Feistel razširitev ← Nazaj na Feistel funkcijo
Pomakni miško na celico, da vidiš na katero mesto se preslika.
Če pogledamo v diagram vidimo da pri tej permutaciji ni veliko križanj. Cilj je namreč razširiti blok podatkov iz 32 bitnega v 48 bitnega. V naslednjem koraku se namreč nad blokoma izvede bitna operacija ekskluzivni ali (XOR), ki potrebuje vhodne podatke enake širine.
01020304 05060708
09101112 13141516
17181920 21222324
25262728 29303132
320102 030405
040506 070809
080910 111213
121314 151617
161718 192021
202122 232425
242526 272829
282930 313201
S škatla 1 ← Nazaj na Feistel funkcijo
S1yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx14041513714
001xxx214152111381
010xxx3101066121211
011xxx59950378
100xxx41511214882
101xxx1346921117
110xxx155121193714
111xxx31010056013

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 0011101
  • Iščemo v drugi vrstici (001xxx)
  • Pogledamo v šesti stolpec (yyy101)
  • Vrednost je 13, kar je v dvojiškem sistemu enako 1101
  • Izhod je 1101
S škatla 2 ← Nazaj na Feistel funkcijo
S2yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx15311384147
001xxx61511238414
010xxx91270211310
011xxx12609511105
100xxx013148710111
101xxx10341513412
110xxx51186127612
111xxx9035214159

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 0011101
  • Iščemo v drugi vrstici (001xxx)
  • Pogledamo v šesti stolpec (yyy101)
  • Vrednost je 8, kar je v dvojiškem sistemu enako 1000
  • Izhod je 1000
S škatla 3 ← Nazaj na Feistel funkcijo
S3yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx10130790149
001xxx6334156510
010xxx12138125714
011xxx111241121581
100xxx13161041390
101xxx861593807
110xxx114115214123
111xxx511105142712

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 0011101
  • Iščemo v drugi vrstici (001xxx)
  • Pogledamo v šesti stolpec (yyy101)
  • Vrednost je 6, kar je v dvojiškem sistemu enako 0110
  • Izhod je 0110
S škatla 4 ← Nazaj na Feistel funkcijo
S4yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx713138141135
001xxx0661590103
010xxx142782512
011xxx1111210414159
100xxx1036159006
101xxx1210111713138
110xxx159114351411
111xxx5122782414

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 0011101
  • Iščemo v drugi vrstici (001xxx)
  • Pogledamo v šesti stolpec (yyy101)
  • Vrednost je 0, kar je v dvojiškem sistemu enako 0000
  • Izhod je 0000
S škatla 5 ← Nazaj na Feistel funkcijo
S5yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx214121142112
001xxx74107111361
010xxx8550315150
011xxx1330914896
100xxx41128112117
101xxx10113472813
110xxx15691512059
111xxx6103405143

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 110111
  • Iščemo v sedmi vrstici (110xxx)
  • Pogledamo v zadnji stolpec (yyy111)
  • Vrednost je 9, kar je v dvojiškem sistemu enako 1001
  • Izhod je 1001
S škatla 6 ← Nazaj na Feistel funkcijo
S6yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx1210115104152
001xxx972126895
010xxx06131313414
011xxx14071153118
100xxx94143152512
101xxx29851215310
110xxx71101441107
111xxx16130118613

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 110111
  • Iščemo v sedmi vrstici (110xxx)
  • Pogledamo v zadnji stolpec (yyy111)
  • Vrednost je 7, kar je v dvojiškem sistemu enako 0111
  • Izhod je 0111
S škatla 7 ← Nazaj na Feistel funkcijo
S7yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx413110211147
001xxx15409811310
010xxx31412395712
011xxx5210156816
100xxx164111113138
101xxx12134710147
110xxx1095560815
111xxx0145293212

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 110111
  • Iščemo v sedmi vrstici (110xxx)
  • Pogledamo v zadnji stolpec (yyy111)
  • Vrednost je 15, kar je v dvojiškem sistemu enako 1111
  • Izhod je 1111
S škatla 8 ← Nazaj na Feistel funkcijo
S8yyy000yyy001yyy010yyy011yyy100yyy101yyy110yyy111
000xxx13121581348
001xxx61015311714
010xxx101295361411
011xxx5001412972
100xxx7211141417
101xxx941210148213
110xxx015612109130
111xxx1533556811

V prvi vrstici in stolpcu tabele so vhodne vrednosti, vsaka celica pa predstavlja en izhod zapisan z desetiškim številom.

Primer:
  • Vhod je 110111
  • Iščemo v sedmi vrstici (110xxx)
  • Pogledamo v zadnji stolpec (yyy111)
  • Vrednost je 0, kar je v dvojiškem sistemu enako 0000
  • Izhod je 0000
Feistel permutacija ← Nazaj na Feistel funkcijo
Pomakni miško na celico, da vidiš na katero mesto se preslika.
Preden se Feistel funkcija zaključi, permutacija P še enkrat premeče bite.
01020304 05060708
09101112 13141516
17181920 21222324
25262728 29303132
16072021 29122817
01152326 05183110
02082414 32270309
19133006 22110425
Generator delnih ključev ← Nazaj na DES shemo
Klikni na elemente, da izveš več o njih.
DES skrivnega ključa ne uporablja neposredno, temveč iz njega izpelje 16 delnih ključev, enega za vsakega od 16 krogov algoritma. Najprej se izvede permutacija PC1 nato pa se podatke razdeli na levi in desni blok ki s pomočjo levih cikličnih pomikov in permutacije PC2 tvorita vseh 16 delnih ključev. Ker je DES simetrični algoritem se iste ključe izračuna tudi pri dešifriranju, vendar se jih uporabi v obratnem vrstnem redu. Za prvi krog se uporabi šestnajsti delni ključ, za drugi krog petnajstega in tako dalje.
Glavni ključ
PC1
 < 
PC2
 < 
Delni ključ 1
 < 
PC2
 < 
Delni ključ 2
 < 
PC2
 < 
Delni ključ 16
PC1 ← Nazaj na shemo generatorja podključev
Pomakni miško na celico, da vidiš na katero mesto se preslika.
Naloga permutacije PC1 je da iz ključa izbere 56 bitov in jih razdeli na levi in desni blok. Verjetno se sprašujete zakaj samo 56, če je pa celoten ključ širok 64 bitov. Kaj se zgodi s preostalimi osmimi? Njihov uradni namen v specifikaciji je preverjanje pravilnosti ključa s pomočjo parnosti (vsakih 8 bitov ključa se mora sešteti v liho vrednost).
Levi blok
57494133 251709
01585042 342618
10025951 433527
19110360 524436
Glavni ključ:
01020304 05060708
09101112 13141516
17181920 21222324
25262728 29303132
33343536 37383940
41424344 45464748
49505152 53545556
57585960 61626364
Desni blok
63554739 312315
07625446 383022
14066153 453729
21130528 201204
PC2 ← Nazaj na shemo generatorja podključev
Pomakni miško na celico, da vidiš na katero mesto se preslika.
Permutacija PC1 iz levega in desnega bloka sestavi delni ključ, ki se uporabi v Feistel funkciji. Števila do vključno 28 pomeni, da se bit vzame iz desnega bloka, število od 29 do 56 pa da se bit vzame iz desnega bloka.
01020304 050607
08091011 121314
15161718 192021
22232425 262728
29303132 333435
36373839 404142
43444546 474849
50515253 545556
141711 240105
032815 062110
231912 042608
160727 201302
415231 374755
304051 453348
444939 563453
464250 362932
Krožni pomik v levo ← Nazaj na shemo generatorja podključev
Med generiranjem delnih ključev se nad levim in desnim blokom izvajajo levi krožni pomiki. V krogih 1, 2, 9 in 16 se izvede samo en pomik, v preostalih krogih pa dvakratni pomik. Spodaj je ilustracija enkratnega krožnega pomika:
10110010
Po zgornjem krožnem pomiku dobimo sledeč razultat:
01100101