📄 bolckf.txt
字号:
/*Program Penyandian
BCA-64 (BySky Crypto Algorithm-64 bit)
Basis Block Cipher 64-bit
Oleh : Bayu Sangkaya / Tingkat II Rangun Palsan
Disusun untuk memenuhi Syarat Mengikuti Ujian Akhir Semester Genap
Mata Kuliah Block Cipher
Dosen : Susila Windarta*/
#include<stdio.h>
void konversi_bit32(unsigned char R0,int bin);
void keygen(unsigned int key);
void permutasi_16bitkanan(int pka16, int ka);
void permutasi_16bitkiri(int pki16, int ki);
void hexa(unsigned char p16, int pka16, int pki16);
void pilih_kunci(int ab);
unsigned char subbyte(unsigned char bytes);
int i,j,ab;
int bin[32],pki16[16],ka[16],ki[16],pka16[16];
unsigned char plain[8],L0[4],R0[4],x[4],p16[4],k[4],m[4],temp[4],keey[4];
unsigned int a[8],b[256],buffer[8],k1[4],k2[4],k3[4],k4[4],k5[4],k6[4],k7[4],k8[4];
unsigned int key;
main() {
int i;
clrscr();
printf("\n\n");
printf("\t\t===============================================\n");
printf("\t\t===============================================\n");
printf("\t\t== Simulasi Algoritma BCA-64 ==\n");
printf("\t\t== BySky(TM) ==\n");
printf("\t\t== Freeware 2007 ==\n");
printf("\t\t===============================================\n");
printf("\t\t===============================================\n\n\n");
printf("\t\t Loading Please Wait");sleep(1);
for(i=0;i<10;i++)
{ printf(".");sleep(1);}
clrscr();
printf("Masukkan 8 karakter plaintext : "); scanf("%s",&plain);
printf("Masukkan 1 nilai kunci (1-511) : "); scanf("%d",&key);
keygen(key);
sleep(1);
for(i=0;i<4;i++)
{ L0[i]=plain[i];}
for(i=0;i<4;i++)
{ R0[i]=plain[i+4];}
for(ab=1;ab<=7;ab++) {
pilih_kunci(ab);
printf("\n\n\n\n>>>>>>>>Round %d",ab);
sleep(1);
for(i=0;i<4;i++)
{printf(".");
sleep(1);}
printf("\n\nL0 : ");
sleep(1);
for(i=0;i<4;i++)
{ printf("%x ",L0[i]); }
printf("\n");
sleep(1);
printf("R0 : ");
sleep(1);
for(i=0;i<4;i++)
{ printf("%x ",R0[i]); }
sleep(1);
printf("\nKunci untuk Round %d :",ab);
sleep(1);
for(i=0;i<4;i++)
{ printf("%x ",keey[i]); }
/*XOR dengan k1*/
printf("\n\nhasil xor dengan k1 : ");
sleep(1);
for(i=0;i<4;i++){
x[i]=R0[i]^keey[i];
printf("%x",x[i]);}
konversi_bit32(x[4],bin[32]);
sleep(1);
printf("\n\nNilai biner R0 xor kunci adalah : ");
sleep(1);
for(i=0;i<32;i++)
printf("%d", bin[i]);
/*Bagi jadi dua*/
for(i=0;i<16;i++)
ki[i]=bin[i];
for(i=0;i<16;i++)
ka[i]=bin[i+16];
/*masuk permutasi 16 bit*/
permutasi_16bitkanan(pka16[16],ka[16]);
permutasi_16bitkiri(pki16[16],ki[16]);
sleep(1);
printf("\n\nHasil permutasinya : ");
sleep(1);
for(i=0;i<16;i++)
printf("%d",pki16[i]);
for(i=0;i<16;i++)
printf("%d",pka16[i]);
hexa(p16[4], pka16[16], pki16[16]);
sleep(1);
printf("\n\nHexanya : ");
sleep(1);
for(i=0;i<4;i++)
printf("%x",p16[i]);
for(i=0;i<4;i++)
k[i]=subbyte(p16[i]);
sleep(1);
printf("\n\nHasil S-Box : ");
sleep(1);
for(i=0;i<4;i++)
printf("%x",k[i]);
/*XOR dengan L0*/
for(i=0;i<4;i++)
m[i]=L0[i]^k[i];
sleep(1);
printf("\n\nHasil xor dengan L0 : ");
sleep(1);
for(i=0;i<4;i++)
printf("%x",m[i]);
printf("\n\n");
sleep(1);
printf("Teks Sandinya (hexa) : ");
sleep(1);
for(i=0;i<4;i++)
printf("%x",m[i]);
for(i=0;i<4;i++)
printf("%x",R0[i]);
printf("\n\n");
sleep(1);
printf("Teks Sandinya (karakter) : ");
sleep(1);
for(i=0;i<4;i++)
printf("%c",m[i]);
for(i=0;i<4;i++)
printf("%c",R0[i]);
for(i=0;i<4;i++) {
temp[i]=L0[i];
L0[i]=R0[i];
R0[i]=m[i];
}
}
printf("\n\n\nSelesai......!!");
getch();
}
void keygen(unsigned int key)
{
int v,w,x,i;
sleep(1);
printf("\nBit Seed yang anda masukkan : ");sleep(1);
for(i=0;i<8;i++)
{a[i]=(key>>(7-i))&1;
printf("%d",a[i]);
}
for(v=0;v<=255;v++)
{ x=a[0]^a[1];
for(i=0;i<7;i++)
{a[i]=a[i+1];
a[7]=x;}
b[v]=a[0];
}
printf("\n\n----key schedule----");
sleep(1);
printf("\n\nHasil LFSR Adalah \n");
sleep(1);
for(v=0;v<=255;v++)
{printf("%d",b[v]);
}
printf ("\n");
/*mendapatkan k1*/
for(i=0;i<8;i++)
{ buffer[i]=b[i]<<(7-i); }
k1[0]=0;
for(i=0;i<8;i++)
{ k1[0]=k1[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+8]<<(7-i); }
k1[1]=0;
for(i=0;i<8;i++)
{ k1[1]=k1[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+16]<<(7-i); }
k1[2]=0;
for(i=0;i<8;i++)
{ k1[2]=k1[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+24]<<(7-i); }
k1[3]=0;
for(i=0;i<8;i++)
{ k1[3]=k1[3]^buffer[i]; }
sleep(1);
printf("\nk1 = ");
for(i=0;i<4;i++)
{printf("%x",k1[i]);}
/*mendapatkan k2*/
for(i=0;i<8;i++)
{ buffer[i]=b[i+32]<<(7-i); }
k2[0]=0;
for(i=0;i<8;i++)
{ k2[0]=k2[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+40]<<(7-i); }
k2[1]=0;
for(i=0;i<8;i++)
{ k2[1]=k2[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+48]<<(7-i); }
k2[2]=0;
for(i=0;i<8;i++)
{ k2[2]=k2[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+56]<<(7-i); }
k2[2]=0;
for(i=0;i<8;i++)
{ k2[2]=k2[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+64]<<(7-i); }
k2[3]=0;
for(i=0;i<8;i++)
{ k2[3]=k2[3]^buffer[i]; }
sleep(1);
printf("\nk2 = ");
for(i=0;i<4;i++)
{printf("%x",k2[i]);}
/*mendapatkan k3*/
for(i=0;i<8;i++)
{ buffer[i]=b[i+72]<<(7-i); }
k3[0]=0;
for(i=0;i<8;i++)
{ k3[0]=k3[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+80]<<(7-i); }
k3[1]=0;
for(i=0;i<8;i++)
{ k3[1]=k3[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+88]<<(7-i); }
k3[2]=0;
for(i=0;i<8;i++)
{ k3[2]=k3[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+96]<<(7-i); }
k3[3]=0;
for(i=0;i<8;i++)
{ k3[3]=k3[3]^buffer[i]; }
sleep(1);
printf("\nk3 = ");
for(i=0;i<4;i++)
{printf("%x",k3[i]);}
/*mendapatkan k4*/
for(i=0;i<8;i++)
{ buffer[i]=b[i+104]<<(7-i); }
k4[0]=0;
for(i=0;i<8;i++)
{ k4[0]=k4[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+112]<<(7-i); }
k4[1]=0;
for(i=0;i<8;i++)
{ k4[1]=k4[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+120]<<(7-i); }
k4[2]=0;
for(i=0;i<8;i++)
{ k4[2]=k4[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+128]<<(7-i); }
k4[3]=0;
for(i=0;i<8;i++)
{ k4[3]=k4[3]^buffer[i]; }
sleep(1);
printf("\nk4 = ");
for(i=0;i<4;i++)
{printf("%x",k4[i]);}
/*mendapatkan k5*/
for(i=0;i<8;i++)
{ buffer[i]=b[i+136]<<(7-i); }
k5[0]=0;
for(i=0;i<8;i++)
{ k5[0]=k5[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+144]<<(7-i); }
k5[1]=0;
for(i=0;i<8;i++)
{ k5[1]=k5[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+152]<<(7-i); }
k5[2]=0;
for(i=0;i<8;i++)
{ k5[2]=k5[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+160]<<(7-i); }
k5[3]=0;
for(i=0;i<8;i++)
{ k5[3]=k5[3]^buffer[i]; }
sleep(1);
printf("\nk5 = ");
for(i=0;i<4;i++)
{printf("%x",k5[i]);}
/*mendapatkan k6*/
for(i=0;i<8;i++)
{ buffer[i]=b[i+168]<<(7-i); }
k6[0]=0;
for(i=0;i<8;i++)
{ k6[0]=k6[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+176]<<(7-i); }
k6[1]=0;
for(i=0;i<8;i++)
{ k6[1]=k6[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+184]<<(7-i); }
k6[2]=0;
for(i=0;i<8;i++)
{ k6[2]=k6[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+192]<<(7-i); }
k6[3]=0;
for(i=0;i<8;i++)
{ k6[3]=k6[3]^buffer[i]; }
sleep(1);
printf("\nk6 = ");
for(i=0;i<4;i++)
{printf("%x",k6[i]);}
/*mendapatkan k7*/
for(i=0;i<8;i++)
{ buffer[i]=b[i+200]<<(7-i); }
k7[0]=0;
for(i=0;i<8;i++)
{ k7[0]=k7[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+208]<<(7-i); }
k7[1]=0;
for(i=0;i<8;i++)
{ k7[1]=k7[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+216]<<(7-i); }
k7[2]=0;
for(i=0;i<8;i++)
{ k7[2]=k7[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=b[i+224]<<(7-i); }
k7[3]=0;
for(i=0;i<8;i++)
{ k7[3]=k7[3]^buffer[i]; }
sleep(1);
printf("\nk7 = ");
for(i=0;i<4;i++)
{printf("%x",k7[i]);}
}
void pilih_kunci(int ab) {
if(ab==1)
{for(i=0;i<4;i++)
{ keey[i]=k1[i];}}
if(ab==2)
{for(i=0;i<4;i++)
{ keey[i]=k2[i];}}
if(ab==3)
{for(i=0;i<4;i++)
{ keey[i]=k3[i];}}
if(ab==4)
{for(i=0;i<4;i++)
{ keey[i]=k4[i];}}
if(ab==5)
{for(i=0;i<4;i++)
{ keey[i]=k5[i];}}
if(ab==6)
{for(i=0;i<4;i++)
{ keey[i]=k6[i];}}
if(ab==7)
{for(i=0;i<4;i++)
{ keey[i]=k7[i];}}
}
/*fungsi untuk mengubah 32 bit menjadi array*/
void konversi_bit32() {
int i,j;
j=0;
for(i=0;i<4;i++)
{ bin[j]=(x[i]>>7)&1;
j++;
bin[j]=(x[i]>>6)&1;
j++;
bin[j]=(x[i]>>5)&1;
j++;
bin[j]=(x[i]>>4)&1;
j++;
bin[j]=(x[i]>>3)&1;
j++;
bin[j]=(x[i]>>2)&1;
j++;
bin[j]=(x[i]>>1)&1;
j++;
bin[j]=x[i]&1;
j++;
}
}
void permutasi_16bitkanan() {
pka16[0]=ka[12];
pka16[1]=ka[8];
pka16[2]=ka[6];
pka16[3]=ka[9];
pka16[4]=ka[0];
pka16[5]=ka[7];
pka16[6]=ka[4];
pka16[7]=ka[14];
pka16[8]=ka[5];
pka16[9]=ka[2];
pka16[10]=ka[11];
pka16[11]=ka[13];
pka16[12]=ka[1];
pka16[13]=ka[15];
pka16[14]=ka[10];
pka16[15]=ka[3];
}
void permutasi_16bitkiri() {
pki16[0]=ki[12];
pki16[1]=ki[8];
pki16[2]=ki[6];
pki16[3]=ki[9];
pki16[4]=ki[0];
pki16[5]=ki[7];
pki16[6]=ki[4];
pki16[7]=ki[14];
pki16[8]=ki[5];
pki16[9]=ki[2];
pki16[10]=ki[11];
pki16[11]=ki[13];
pki16[12]=ki[1];
pki16[13]=ki[15];
pki16[14]=ki[10];
pki16[15]=ki[3];
}
void hexa(){
for(i=0;i<8;i++)
{ buffer[i]=pki16[i]<<(7-i); }
p16[0]=0;
for(i=0;i<8;i++)
{ p16[0]=p16[0]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=pki16[i+8]<<(7-i); }
p16[1]=0;
for(i=0;i<8;i++)
{ p16[1]=p16[1]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=pka16[i]<<(7-i); }
p16[2]=0;
for(i=0;i<8;i++)
{ p16[2]=p16[2]^buffer[i]; }
for(i=0;i<8;i++)
{ buffer[i]=pka16[i+8]<<(7-i); }
p16[3]=0;
for(i=0;i<8;i++)
{ p16[3]=p16[3]^buffer[i]; }
}
unsigned char subbyte(unsigned char bytes)
{
unsigned char sbytes[16][16]={0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16};
return(sbytes[bytes/16][bytes%16]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -