Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська Політехніка»
Звіт
Про виконання лабораторної роботи №2
з курсу «Прикладна криптологія»
на тему «Система блочного шифрування S-DES»
Перевірив: Петришин А.В.
Львів – 2012
Мета: Створити просту криптографічну систему на основі спрощеного блочного алгоритму Simple DES (S-DES) та дослідити її роботу.
Завдання: Створити просту криптографічну систему на основі спрощеного блочного алгоритму S-DES.
Код програми на мові JavaScript:
<html><head><title>Lab2</title></head><body><form name="data">
Текст:<input type="text" name="text"> <span id="1"></span><br>
Ключ:<input type="text" name="key"> <span id="2"></span><br>
<input type="button" value="Encrypt" onclick="Encrypt();">
<input type="button" value="Decrypt" onclick="Decrypt();">
</form><script>
function Encrypt(){var text=document.data.text.value;
var span1=document.getElementById("1");var span2=document.getElementById("2");
var K1=""; var K2=""; var K=""; var K=document.data.key.value;
if (!K) for(i=0;i<10;i++) K+=Math.round(Math.random());
span2.innerHTML=K;K1=P8(Zsuv(P10(K)));K2=P8(Zsuv(Zsuv(Zsuv(P10(K)))));
text=IP(text);text=F(text,K1);text=F(text,K2);text=IP_1(text);
span1.innerHTML=text;}
function Decrypt(){var text=document.data.text.value;
var span1=document.getElementById("1");var span2=document.getElementById("2");
var K1=""; var K2=""; var K=""; var K=document.data.key.value;
span2.innerHTML=K;K1=P8(Zsuv(P10(K)));K2=P8(Zsuv(Zsuv(Zsuv(P10(K)))));
text=IP(text);text=F_1(text,K2);text=F_1(text,K1);text=IP_1(text);
span1.innerHTML=text;}
function F(t,Ki){var L=""; var R=""; var LR="";
for(i=0;i<4;i++) {L+=t.charAt(i)+""; R+=t.charAt(i+4)+"";}
LR= (R.charAt(3)*1+Ki.charAt(0)*1)%2+""+(R.charAt(0)*1+Ki.charAt(1)*1)%2+""+
(R.charAt(1)*1+Ki.charAt(2)*1)%2+""+(R.charAt(2)*1+Ki.charAt(3)*1)%2+""+
(R.charAt(1)*1+Ki.charAt(4)*1)%2+""+(R.charAt(2)*1+Ki.charAt(5)*1)%2+""+
(R.charAt(3)*1+Ki.charAt(6)*1)%2+""+(R.charAt(0)*1+Ki.charAt(7)*1)%2+"";
var S0="1032321002133131"; var S1="1123201330102103"; var a=0;
a=1*S0.charAt((LR.charAt(0)*2+LR.charAt(3)*1)*4+(LR.charAt(1)*2+LR.charAt(2)*1)*1); S0=((a-(a%2))/2)+""+(a%2)+"";
a=1*S1.charAt((LR.charAt(4)*2+LR.charAt(7)*1)*4+(LR.charAt(5)*2+LR.charAt(6)*1)*1); S1=((a-(a%2))/2)+""+(a%2)+"";
LR=S0+""+S1+"";t="";for(i=0;i<4;i++) t+=R.charAt(i)+"";
for(i=0;i<4;i++) t+=((L.charAt(i)*1)+(LR.charAt(i)*1))%2+"";return t;}
function F_1(t,Ki){var L=""; var R=""; var LR="";
for(i=0;i<4;i++) {L+=t.charAt(i)+""; R+=t.charAt(i+4)+"";}
LR= (L.charAt(3)*1+Ki.charAt(0)*1)%2+""+(L.charAt(0)*1+Ki.charAt(1)*1)%2+""+
(L.charAt(1)*1+Ki.charAt(2)*1)%2+""+(L.charAt(2)*1+Ki.charAt(3)*1)%2+""+
(L.charAt(1)*1+Ki.charAt(4)*1)%2+""+(L.charAt(2)*1+Ki.charAt(5)*1)%2+""+
(L.charAt(3)*1+Ki.charAt(6)*1)%2+""+(L.charAt(0)*1+Ki.charAt(7)*1)%2+"";
var S0="1032321002133131"; var S1="1123201330102103"; var a=0;
a=1*S0.charAt((LR.charAt(0)*2+LR.charAt(3)*1)*4+(LR.charAt(1)*2+LR.charAt(2)*1)*1); S0=((a-(a%2))/2)+""+(a%2)+"";
a=1*S1.charAt((LR.charAt(4)*2+LR.charAt(7)*1)*4+(LR.charAt(5)*2+LR.charAt(6)*1)*1); S1=((a-(a%2))/2)+""+(a%2)+"";
LR=S0+""+S1+"";t="";for(i=0;i<4;i++) t+=((R.charAt(i)*1)+(LR.charAt(i)*1))%2+"";
for(i=0;i<4;i++) t+=L.charAt(i)+"";return t;}
function IP(b){var a="";a+=b.charAt(1)+b.charAt(5)+b.charAt(2)+b.charAt(0)+
b.charAt(3)+b.charAt(7)+b.charAt(4)+b.charAt(6);return a;}
function IP_1(b){var a="";a+=b.charAt(3)+b.charAt(0)+b.charAt(2)+b.charAt(4)+
b.charAt(6)+b.charAt(1)+b.charAt(7)+b.charAt(5);return a;}
function P10(a){var b="";b+=a.charAt(2)+a.charAt(4)+a.charAt(1)+a.charAt(6)+a.charAt(3)+
a.charAt(9)+a.charAt(0)+a.charAt(8)+a.charAt(7)+a.charAt(5);return b;}
function Zsuv(a){var b="";b+=a.charAt(1)+a.charAt(2)+a.charAt(3)+a.charAt(4)+a.charAt(0)+
a.charAt(6)+a.charAt(7)+a.charAt(8)+a.charAt(9)+a.charAt(5);return b;}
function P8(a){var b="";b+=a.charAt(5)+a.charAt(2)+a.charAt(6)+a.charAt(3)+
a.charAt(7)+a.charAt(4)+a.charAt(9)+a.charAt(8);return b;}
</script></body></html>
Результати роботи програми.
Зашифровка тексту:
Розшифровка тексту:
Висновок.
Я ознайомився з роботою блокового шифру DES на прикладі спрощеного навчального алгоритму Simple DES.
Програма зашифровує вхідний 8-бітовий текст 10-бітовим ключем. Якщо ключ не вводити, програма згенерує його випадковим чином.
Зашифрований текст виводиться після поля для вводу повідомлення, а використаний ключ – після поля вводу ключа.
Для розшифровки потрібно ввести отриманий криптотекст і використаний ключ. Розшифроване повідомлення виводиться після поля для вводу тексту.
Як бачимо на знімках екрану, програма зашифрувала повідомлення «00101101» за допомогою згенерованого випадковим чином ключа «0010011111» і отримала криптограму «00101000». Криптограма цим самим ключем успішно розшифрована, отримана початкова послідовність «00101101».