Posted by: nurilla7 | 6 Mei 2008

Hill’s Pada Matlab

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.. :mrgreen:

Atau mungkin yang mau GUI saya, bisa hubungi saya aja kali ya, nanti kalau memungkinkan, saya berikan.. :-)

Selamat mencoba.. :mrgreen:

Tags: , , ,

Responses

wah makasi ya ud sangat membantu saya dan tman2 tentang hill cipher…

hm,,,
yang blm kmu slesain itu bagian dekripsi monographic yang mna.nya ya???

blh mnta tampilan GUI-nya gak???

mkasih sbelumnya…

Alhamdulillah kalo adayang bisa saya bantu.. :-)
oh iya, itu yang di atas belum saya masukkan code untuk dekripsi mongraphicnya ya? Hehehe,, maap.. :mrgreen:
Otre, GUI-nya saya kirim ke email ya,, tapi itu GUI yang saya kumpulin ke dosen saya juga,, gapapa ya.. :-)

Leave a response

Your response:

Categories