Semester kemarin saya mendapat tugas untuk membuat sebuah aplikasi dari salah satu sitem penyandisn Hill’s yang ada. Saya dan kelompok saya memutuskan untuk membuat aplikasi yang didalamnya bisa berisi penyandian monographic hill’s dan digraphic hill’s. Aplikasi ini dibuat dengan matlab. Nih code-nya:
enkripsi monographic:
function cipherm = encryptm(plain,rk,a,k1)
l = size(plain);
%ubah teks ke angka
for i = 1 : l
%fprintf(’%s\n’,rk);
for j = 1 : 26
if plain(i) == rk(j)
x1=j-1;%fprintf(’x1: %d\n’,x1);
if plain(i) == plain(i+1)
x1=j-1;
end
elseif (plain(i+1) == rk(j))
x1=j-1;%fprintf(’x1: %d\n’,x1);
end
end
y1 = mod(((a*x)+k1),26);
cipher(i)=char(rk(y1+1));
%fprintf(’%s\n’,cipher(i));
end
return
enkripsi digraphic:
function cipher = encrypt(plain,rk,a,b,c,d,k1,k2)
l = size(plain);
if mod(l(1,2),2)~=0
for i = 1 : 2 - mod(l(1,2),2)
plain(l(1,2)+i) =’x';
end
end
z = a*d - b*c;
z = mod(abs(z),2);
k = a*d - b*c;
k = mod(abs(k),13);
if (z == 0 || k == 0)
warndlg(’Mmm,, determinannya genap atau 13 tuh..’,'Warning’);
%break;
%stop;
end
%ubah teks ke angka
for i = 1 : 2 : l(1,2)
%fprintf(’%s\n’,rk);
for j = 1 : 26
if plain(i) == rk(j)
x1=j-1;%fprintf(’x1: %d\n’,x1);
if plain(i) == plain(i+1)
x2=j-1;
end
elseif (plain(i+1) == rk(j))
x2=j-1;%fprintf(’x2: %d\n’,x2);
end
end
v = mod(a*x1,26);
w = mod(b*x2,26);
y1 = mod((v+w+k1),26);
y2 = mod(((c*x1)+(d*x2)+k2),26);
cipher(i)=char(rk(y1+1));
cipher(i+1)=char(rk(y2+1));
%fprintf(’%s\n’,cipher(i));
end
return
dekripsi digraphic:
function cipher = decrypt(plain,rk,a,b,c,d,k1,k2)
l = size(plain);
n = abs(mod((mod(a*d,26)-mod(b*c,26)),26));
%fprintf(’n: %d\n’,n);
for i = 1 : 26
if(mod(i*n,26) == 1)
n = i;
break;
end
end
%fprintf(’n: %d\n’,n);
z = a*d - b*c;
z = mod(abs(z),2);
k = a*d - b*c;
k = mod(abs(k),13);
if (z == 0 || k == 0)
warndlg(’Mmmm,,determinannya genap atau 13 tuh..’,'Warning’);
%break;
%stop;
end
%ubah teks ke angka
for i = 1 : 2 : l(1,2)
%fprintf(’%d\n’,l);
for j = 1 : 26
if plain(i) == rk(j)
y1=j-1;%fprintf(’y1: %d\n’,y1);
if plain(i) == plain(i+1)
y2=j-1;
end
elseif (plain(i+1) == rk(j))
y2=j-1;%fprintf(’y2: %d\n’,y2);
end
end
x1 = mod(n*(mod(d*(y1-k1),26)-mod(b*(y2-k2),26)),26);
x2 = mod(n*(mod(a*(y2-k2),26)-mod(c*(y1-k1),26)),26);
%fprintf(’x1 dan x2: %d %d\n’,x1,x2);
cipher(i)=char(rk(x1+1));
cipher(i+1)=char(rk(x2+1));
%fprintf(’%d\n’,i);
end
return
kctr:
function eks = kctr(kk)
k=[];
temp=[];
post=[];
k = kk;
l=size(kk);%mencari ukuran kata kunci
%melakukan ekstrak huruf yang sama
for i=1:l(1,2)-1
if double(k(i))~=32
for j=i+1 : l(1,2)
if k(i) == k(j)
k(j)=’@';
end
end
else
k(i) = ‘@’;
end
end
%menampilkan hasil ekstrak
j=1;
for i =1 : l(1,2)
if k(i)~=’@’
temp(j) = k(i);
j = j+1;
end
l = size(k);
end
%fprintf(’%s\n’,eks);
%buat pemetaan kunci
for i = 1 : 26
map(1,i) = char(96+i);
end
l = size(temp);
%fprintf(’%d\n’,l);
mapsem = map(1,:);
x=0;
for i = 1 : 26
for j = 1 : l(1,2)
if mapsem(i) == temp(j)
mapsem(i)=’@';
x= x+1;
end
end
end
%fprintf(’%s\n’,mapsem);
for i = 1 : 26
if mapsem(i) ~= ‘@’
temp(x+1) = mapsem(i);
x = x+1;
end
end
%fprintf(’%s\n’,temp);
%buat ngurutin
for i= 1 : l(1,2)
post(i) = temp(i);
end
for i = 1 : l(1,2)-1
y = i;
for j = i+1 : l(1,2)
if post(y) > post(j)
y = j;
end
end
p = post(y);
post(y) = post(i);
post(i) = p;
end
%fprintf(’%s\n’,post);
z = 1;
for i = 1:l(1,2)
for j = 1 : l(1,2)
if temp(j) == post(i)
%fprintf(’%d\n’,z);
eks(z) = char(temp(j));
m = j;
z = z+1;
while m <= 26
m = m + l(1,2);
if m > 26
break;
end
eks(z) = char(temp(m));
z = z+1;
end
end
end
end
return
ks:
function eks = ks(kk)
k=[];
k = kk;
l=size(kk);%mencari ukuran kata kunci
%melakukan ekstrak huruf yang sama
for i=1:l(1,2)-1
if double(k(i))~=32
for j=i+1 : l(1,2)
if k(i) == k(j)
k(j)=’@';
end
end
else
k(i) = ‘@’;
end
end
%menampilkan hasil ekstrak
j=1;
for i =1 : l(1,2)
if k(i)~=’@’
eks(j) = k(i);
j = j+1;
end
l = size(k);
end
%buat pemetaan kunci
for i = 1 : 26
map(1,i) = char(96+i);
end
l = size(eks);
%fprintf(’%d’,l);
mapsem = map(1,:);
x=0;
for i = 1 : 26
for j = 1 : l(1,2)
if mapsem(i) == eks(j)
mapsem(i)=’@';
x= x+1;
end
end
end
%fprintf(’%s\n’,mapsem);
for i = 1 : 26
if mapsem(i) ~= ‘@’
eks(x+1) = mapsem(i);
x = x+1;
end
end
return
function eks = sctr(kk)
k=[];
temp=[];
post=[];
k = kk;
l=size(kk);%mencari ukuran kata kunci
%melakukan ekstrak huruf yang sama
for i=1:l(1,2)-1
if double(k(i))~=32
for j=i+1 : l(1,2)
if k(i) == k(j)
k(j)=’@';
end
end
else
k(i) = ‘@’;
end
end
%menampilkan hasil ekstrak
j=1;
for i =1 : l(1,2)
if k(i)~=’@’
temp(j) = k(i);
j = j+1;
end
l = size(k);
end
%fprintf(’%s\n’,eks);
%buat pemetaan kunci
for i = 1 : 26
map(1,i) = char(96+i);
end
l = size(temp);
%fprintf(’%d\n’,l);
mapsem = map(1,:);
x=0;
for i = 1 : 26
for j = 1 : l(1,2)
if mapsem(i) == temp(j)
mapsem(i)=’@';
x= x+1;
end
end
end
%fprintf(’%s\n’,mapsem);
for i = 1 : 26
if mapsem(i) ~= ‘@’
temp(x+1) = mapsem(i);
x = x+1;
end
end
p = 1;
for i = 1:l(1,2)
eks(p) = char(temp(i));
m =i;
p = p+1;
while m < 26
m = m + l(1,2);
if m > 26
break;
end
eks(p) = char(temp(m));
p = p+1;
end
end
%l = size(eks);
%eks = grup(eks,l);
return
Tapi ada masalah. Saya cde untuk dekripsi monographicnya belum selesai waktu itu, dan sampai sekarang tidak saya selesaikan.. Hehehe.
Sebenarnya juga, saya sudah embuat tampilan GUI-nya, tapi susah kalau saya tampilkan di blog,,(saya gak ngerti bisa atau tidak upload file, gimana caranya).
Untuk yang mau melanjutkan, silahkan tinggal di masukkan ke GUI-nya. Mohon maaf banget untuk kekurangan ini, karena waktu yang saya punya terbatas sedangkan tugas saya terus bertambah.. Hehehehe..
Atau mungkin yang mau GUI saya, bisa hubungi saya aja kali ya, nanti kalau memungkinkan, saya berikan..
Selamat mencoba..
Categories:
Tags: ilmu, Kriptografi, Kuliah, matlab