⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bolckf.txt

📁 I try to make crypto algorithm that called BCA-64 and try to code it in C language
💻 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 + -