Posts filed under ‘pemrograman’
Header hills cipher
Sebelumnya ada headernya dulu nih
/*
HILL.H
by jokobayan
e-mail: jokobayan@gmail.com
*/
extern void hill_mono_encrypt(char plain[],char cipher[],char rk[],int a,int k);
extern void hill_mono_decrypt(char plain[],char cipher[],char rk[],int a,int k);
extern void hill_di_encrypt(char plain[],char cipher[],char rk[],int a,int b,int c,int d,int k1,int k2);
extern void hill_di_decrypt(char plain[],char cipher[],char rk[],int a,int b,int c,int d,int k1,int k2);
extern void hill_tri_encrypt(char plain[],char cipher[],char rk[], int a,int b,int c,int d,int e,int f,int g,int h,int i);
extern void hill_tri_decrypt(char plain[],char cipher[],char rk[], int a,int b,int c,int d,int e,int f,int g,int h,int i);
extern void hill_poly_encrypt(char plain[],char cipher[],char rk[],int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4,int c1,int c2,int c3,int c4,int d1,int d2,int d3,int d4,int k11,int k12,int k13,int k14,int k21,int k22,int k23,int k24);
extern void hill_poly_decrypt(char plain[],char cipher[],char rk[],int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4,int c1,int c2,int c3,int c4,int d1,int d2,int d3,int d4,int k11,int k12,int k13,int k14,int k21,int k22,int k23,int k24);
Moga2 guna!!!!!!
Source Code Hill Cipher
Halo temen-temen MP 2006, nih saya mau bagi2 source code hills buat tugas Mr 3. Inget, yang bikin nih source code Mr.Joko Bayan in 4MP
/*
HILL.C
by jokobayan
e-mail: jokobayan@gmail.com
*/
#include <string.h>
#include <math.h>
#include “MATHMOD.H”
void hill_mono_encrypt(char plain[],char cipher[],char rk[],int a,int k){
int x,y;
unsigned int i,j;
for(i=0;i<strlen(plain);i++){
for(j=0;j<strlen(rk);j++)
if(plain[i]==rk[j])
x=j;
y=mod26(multiply_mod26(a,x)+k);
cipher[i]=rk[y];
}
cipher[strlen(plain)]=”;
}
void hill_mono_decrypt(char plain[],char cipher[],char rk[],int a,int k){
int x,y,n;
unsigned int i,j;
n=regular_mod26(a);
for(i=0;i<strlen(cipher);i++){
for(j=0;j<strlen(rk);j++)
if(cipher[i]==rk[j])
y=j;
x=multiply_mod26(n,(y-k));
plain[i]=rk[x];
}
plain[strlen(cipher)]=”;
}
void hill_di_encrypt(char plain[],char cipher[],char rk[],int a,int b,int c,int d,int k1,int k2){
int x1,x2;
int y1,y2;
unsigned int i,j;
for(i=0;i<strlen(plain);i+=2){
for(j=0;j<26;j++){
if(plain[i]==rk[j])
x1=j;
if(plain[i+1]==rk[j])
x2=j;
}
y1=mod26(multiply_mod26(a,x1)+multiply_mod26(b,x2)+k1);
y2=mod26(multiply_mod26(c,x1)+multiply_mod26(d,x2)+k2);
cipher[i]=rk[y1];
cipher[i+1]=rk[y2];
}
cipher[strlen(plain)]=”;
}
void hill_di_decrypt(char plain[],char cipher[],char rk[],int a,int b,int c,int d,int k1,int k2){
int n,y1,y2;
int x1,x2;
unsigned int i,j;
n=regular_mod26(det_m22_mod26(a,b,c,d));
for(i=0;i<strlen(cipher);i+=2){
for(j=0;j<26;j++){
if(cipher[i]==rk[j])
y1=j;
if(cipher[i+1]==rk[j])
y2=j;
}
x1=multiply_mod26(n,(multiply_mod26(d,(y1-k1))-multiply_mod26(b,(y2-k2))));
x2=multiply_mod26(n,(multiply_mod26(a,(y2-k2))-multiply_mod26(c,(y1-k1))));
plain[i]=rk[x1];
plain[i+1]=rk[x2];
}
plain[strlen(cipher)]=”;
}
void hill_tri_encrypt(char plain[], char cipher[], char rk[], int a,int b,int c,int d,int e,int f,int g,int h,int i){
unsigned int j,k;
int x1,x2,x3;
int y1,y2,y3;
for(j=0;j<strlen(plain);j+=3){
for(k=0;k<26;k++){
if(plain[j]==rk[k])
x1=k;
if(plain[j+1]==rk[k])
x2=k;
if(plain[j+2]==rk[k])
x3=k;
}
y1=mod26(multiply_mod26(a,x1)+multiply_mod26(b,x2)+multiply_mod26(c,x3));
y2=mod26(multiply_mod26(d,x1)+multiply_mod26(e,x2)+multiply_mod26(f,x3));
y3=mod26(multiply_mod26(g,x1)+multiply_mod26(h,x2)+multiply_mod26(i,x3));
cipher[j]=rk[y1];
cipher[j+1]=rk[y2];
cipher[j+2]=rk[y3];
}
cipher[strlen(plain)]=”;
}
void hill_tri_decrypt(char plain[],char cipher[],char rk[],int a,int b,int c,int d,int e,int f,int g,int h,int i){
unsigned int j,k;
int y1,y2,y3;
int x1,x2,x3;
int n;
n=regular_mod26(det_m33_mod26(a,b,c,d,e,f,g,h,i));
for(j=0;j<strlen(cipher);j+=3){
for(k=0;k<26;k++){
if(cipher[j]==rk[k])
y1=k;
if(cipher[j+1]==rk[k])
y2=k;
if(cipher[j+2]==rk[k])
y3=k;
}
x1=multiply_mod26(n,det_m33_mod26(y1,b,c,y2,e,f,y3,h,i));
x2=multiply_mod26(n,det_m33_mod26(a,y1,c,d,y2,f,g,y3,i));
x3=multiply_mod26(n,det_m33_mod26(a,b,y1,d,e,y2,g,h,y3));
plain[j]=rk[x1];
plain[j+1]=rk[x2];
plain[j+2]=rk[x3];
}
plain[strlen(cipher)]=”;
}
void hill_poly_encrypt(char plain[],char cipher[],char rk[],int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4,int c1,int c2,int c3,int c4,int d1,int d2,int d3,int d4,int k11,int k12,int k13,int k14,int k21,int k22,int k23,int k24){
unsigned int i,j;
int x11,x12,x13,x14,x21,x22,x23,x24;
int y11,y12,y13,y14,y21,y22,y23,y24;
int C1,C2,C3,C4,D1,D2,D3,D4;
for(i=0;i<strlen(plain);i+=8){
for(j=0;j<26;j++){
if(plain[i]==rk[j])
x11=j;
if(plain[i+1]==rk[j])
x12=j;
if(plain[i+2]==rk[j])
x13=j;
if(plain[i+3]==rk[j])
x14=j;
if(plain[i+4]==rk[j])
x21=j;
if(plain[i+5]==rk[j])
x22=j;
if(plain[i+6]==rk[j])
x23=j;
if(plain[i+7]==rk[j])
x24=j;
}
multiply_matrix_mod26(a1,a2,a3,a4,x11,x12,x13,x14,&C1,&C2,&C3,&C4);
multiply_matrix_mod26(b1,b2,b3,b4,x21,x22,x23,x24,&D1,&D2,&D3,&D4);
y11=mod26(C1+D1+k11);
y12=mod26(C2+D2+k12);
y13=mod26(C3+D3+k13);
y14=mod26(C4+D4+k14);
multiply_matrix_mod26(c1,c2,c3,c4,x11,x12,x13,x14,&C1,&C2,&C3,&C4);
multiply_matrix_mod26(d1,d2,d3,d4,x21,x22,x23,x24,&D1,&D2,&D3,&D4);
y21=mod26(C1+D1+k21);
y22=mod26(C2+D2+k22);
y23=mod26(C3+D3+k23);
y24=mod26(C4+D4+k24);
cipher[i]=rk[y11];
cipher[i+1]=rk[y12];
cipher[i+2]=rk[y13];
cipher[i+3]=rk[y14];
cipher[i+4]=rk[y21];
cipher[i+5]=rk[y22];
cipher[i+6]=rk[y23];
cipher[i+7]=rk[y24];
}
cipher[strlen(plain)]=”;
}
void hill_poly_decrypt(char plain[],char cipher[],char rk[],int a1,int a2,int a3,int a4,int b1,int b2,int b3,int b4,int c1,int c2,int c3,int c4,int d1,int d2,int d3,int d4,int k11,int k12,int k13,int k14,int k21,int k22,int k23,int k24){
unsigned int i,j;
int n;
int x11,x12,x13,x14,x21,x22,x23,x24;
int y11,y12,y13,y14,y21,y22,y23,y24;
int C1,C2,C3,C4,D1,D2,D3,D4;
int K11,K12,K13,K14,K21,K22,K23,K24;
int adj[4][4];
int M[4][4];
n=regular_mod26(mod26(multiply_mod26(a1,det_m33_mod26(a4,b3,b4,c2,d1,d2,c4,d3,d4))-multiply_mod26(a3,det_m33_mod26(a2,b1,b2,c2,d1,d2,c4,d3,d4))+multiply_mod26(c1,det_m33_mod26(a2,b1,b2,a4,b3,b4,c4,d3,d4))-multiply_mod26(c3,det_m33_mod26(a2,b1,b2,a4,b3,b4,c2,d1,d2))));
M[0][0]=det_m33_mod26(a4,b3,b4,c2,d1,d2,c4,d3,d4);
M[1][0]=det_m33_mod26(a2,b1,b2,c2,d1,d2,c4,d3,d4);
M[2][0]=det_m33_mod26(a2,b1,b2,a4,b3,b4,c4,d3,d4);
M[3][0]=det_m33_mod26(a2,b1,b2,a4,b3,b4,c2,d1,d2);
M[0][1]=det_m33_mod26(a3,b3,b4,c1,d1,d2,c3,d3,d4);
M[1][1]=det_m33_mod26(a1,b1,b2,c1,d1,d2,c3,d3,d4);
M[2][1]=det_m33_mod26(a1,b1,b2,a3,b3,b4,c3,d3,d4);
M[3][1]=det_m33_mod26(a1,b1,b2,a3,b3,b4,c1,d1,d2);
M[0][2]=det_m33_mod26(a3,a4,b4,c1,c2,d2,c3,c4,d4);
M[1][2]=det_m33_mod26(a1,a2,b2,c1,c2,d2,c3,c4,d4);
M[2][2]=det_m33_mod26(a1,a2,b2,a3,a4,b4,c3,c4,d4);
M[3][2]=det_m33_mod26(a1,a2,b2,a3,a4,b4,c1,c2,d2);
M[0][3]=det_m33_mod26(a3,a4,b3,c1,c2,d1,c3,c4,d3);
M[1][3]=det_m33_mod26(a1,a2,b1,c1,c2,d1,c3,c4,d3);
M[2][3]=det_m33_mod26(a1,a2,b1,a3,a4,b3,c3,c4,d3);
M[3][3]=det_m33_mod26(a1,a2,b1,a3,a4,b3,c1,c2,d1);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
adj[i][j]=multiply_mod26(n,M[j][i]*(int)pow(-1,j+i));
multiply_matrix_mod26(adj[0][0],adj[0][1],adj[1][0],adj[1][1],k11,k12,k13,k14,&C1,&C2,&C3,&C4);
multiply_matrix_mod26(adj[0][2],adj[0][3],adj[1][2],adj[1][3],k21,k22,k23,k24,&D1,&D2,&D3,&D4);
K11=reciprocal_mod26(C1+D1);
K12=reciprocal_mod26(C2+D2);
K13=reciprocal_mod26(C3+D3);
K14=reciprocal_mod26(C4+D4);
multiply_matrix_mod26(adj[2][0],adj[2][1],adj[3][0],adj[3][1],k11,k12,k13,k14,&C1,&C2,&C3,&C4);
multiply_matrix_mod26(adj[2][2],adj[2][3],adj[3][2],adj[3][3],k21,k22,k23,k24,&D1,&D2,&D3,&D4);
K21=reciprocal_mod26(C1+D1);
K22=reciprocal_mod26(C2+D2);
K23=reciprocal_mod26(C3+D3);
K24=reciprocal_mod26(C4+D4);
for(i=0;i<strlen(cipher);i+=8){
for(j=0;j<26;j++){
if(cipher[i]==rk[j])
y11=j;
if(cipher[i+1]==rk[j])
y12=j;
if(cipher[i+2]==rk[j])
y13=j;
if(cipher[i+3]==rk[j])
y14=j;
if(cipher[i+4]==rk[j])
y21=j;
if(cipher[i+5]==rk[j])
y22=j;
if(cipher[i+6]==rk[j])
y23=j;
if(cipher[i+7]==rk[j])
y24=j;
}
multiply_matrix_mod26(adj[0][0],adj[0][1],adj[1][0],adj[1][1],y11,y12,y13,y14,&C1,&C2,&C3,&C4);
multiply_matrix_mod26(adj[0][2],adj[0][3],adj[1][2],adj[1][3],y21,y22,y23,y24,&D1,&D2,&D3,&D4);
x11=mod26(C1+D1+K11);
x12=mod26(C2+D2+K12);
x13=mod26(C3+D3+K13);
x14=mod26(C4+D4+K14);
multiply_matrix_mod26(adj[2][0],adj[2][1],adj[3][0],adj[3][1],y11,y12,y13,y14,&C1,&C2,&C3,&C4);
multiply_matrix_mod26(adj[2][2],adj[2][3],adj[3][2],adj[3][3],y21,y22,y23,y24,&D1,&D2,&D3,&D4);
x21=mod26(C1+D1+K21);
x22=mod26(C2+D2+K22);
x23=mod26(C3+D3+K23);
x24=mod26(C4+D4+K24);
plain[i]=rk[x11];
plain[i+1]=rk[x12];
plain[i+2]=rk[x13];
plain[i+3]=rk[x14];
plain[i+4]=rk[x21];
plain[i+5]=rk[x22];
plain[i+6]=rk[x23];
plain[i+7]=rk[x24];
}
plain[strlen(cipher)]=”;
}
Semoga bisa berguna. But jangan copas aj ye, ntar ga dapet ilmunya!!!!