• Tidak ada hasil yang ditemukan

//c++ code dari Algoritma IDEA

//////////////////////////////////////////////////////// //

// Proyek untuk mendukung skripsi dengan judul:

// Perancangan dan Implmentasi Sistem Keamanan Data Menggunakan // Algoritma Kriptografi Simetri IDEA (International Data Encryption // Algorithm)

// //

// Oleh

// Nama : Dewi Try Agustina // NIM : 041401015

//

// gambaran ikhtisar : Program ini melakukan proses berikut ini: // - menampilkan semua subkunci-subkunci enkripsi dan

// dekripsi yang digunakan pada proses enkripsi dan dekripsi // - mengenkripsi pesan plainteks

// - mendekripsi pesan cipherteks

// - menampilkan perincian hasil round demi round // (totalnya 8 putaran) //

// Program berisi menu pengarahan user, dimana user dapat memilih // kunci inisial 128-bit dan juga memilih pesan untuk dienkripsi

// dan didekripsi. //

// Peng-Compile-an : Program ini telah diuji untuk bekerja pada

// Windows XP OS dengan menggunakan kompiler g++ (flop.engr.orst.edu) // Untuk mengompile: g++ Idea.cpp -o Idea.exe

// //

// Catatan : Program ini sedikit tidak rapi. Pengkodean dapat dibuat // lebih efisien.

//

// Pemakaian : Run dapat dieksekusi tanpa argumen: Idea.exe // Lalu pilihlah pilihan menu yang tepat.

// //

//////////////////////////////////////////////

// main() ada di dasar file ! #include <stdio.h> #include <iostream> #include <stdlib.h> #include <cassert> #include <string> //global #define NUMSUBKEYS 52 #define NUMROUNDS 8 #define MAXINPUTSIZE 32

// jika menggunakan #define dengan // angka-angka ini, akan timbul masalah // ketika diambil mod dari angka-angka ini. unsigned int TWOPOWER16 = 65536;

unsigned int TWOPOWER161 = 65537; unsigned int inputsize;

// semua informasi subkunci

unsigned short esubkeys[NUMSUBKEYS]; unsigned short dsubkeys[NUMSUBKEYS]; unsigned int origkeyint[4];

unsigned char origkeychar[17];

//*************************************************** // argumen adalah array dari karakter dan menampilkan // nilai hex dari 4 karakter bertalian (4 byte) // dimulai pada pointer. pointer itu mengulang // sampai semua bit pada string asli dibaca

//***************************************************

void printHex (unsigned char* start) {

unsigned int* val = (unsigned int*)start; int times = inputsize/4;

cout <<endl;

for (int i=0; i<times;i++) {

printf ("\t\tbit %03d sampai %03d: 0x%08x\n",(32*i)+1,8*4*(i+1),*val);

start+=4;

val = (unsigned int*)start; }

}

//****************************************

// Ini adalah inti mesin enkripsi dan dekripsi yang

// melakukan semua putaran dan melakukan semua operasi aritmatik // add,mult,xor,swap,invers)

//****************************************

void runIdea(unsigned char* msg, unsigned char* outmsg,unsigned short* keysbit16,int writeflag)

{

//if writeflag is 1, then we print round by round results

unsigned short x1,x2,x3,x4; unsigned short y1,y2,y3,y4; unsigned short x5,x6,x7,x8,x9,x10; unsigned short x11,x12,x13,x14; unsigned short xtemp;

unsigned int writeint;

// msg adalah 1 byte. buat 2 byte ptr untuk memfasilitasi pengkopian untuk

// bidang 16 bit

unsigned short* msgbit16 = (unsigned short*) msg; //cout << "msg is " << *msg <<endl; x1 = *msgbit16++; x2 = *msgbit16++; x3 = *msgbit16++; x4 = *msgbit16++; //x1 = (x1 >>8) | (x1<<8); //x2 = (x2 >>8) | (x2<<8); //x3 = (x3 >>8) | (x3<<8); //x4 = (x4 >>8) | (x4<<8);

// ini untuk men-debug maksud.

// membuat lebih hebat dari 8 jika tidak ingin debug int tst=9;

// catatan bahwa mod 2^16+1 dapat menghasilkan nilai yang mana adalah 2^16.

// ini lebih besar dari ruang untuk 16 bit, jadi // operasi mod membuat 2^16 mod 2^16+1 sama dengan 0.

for (int i=0; i<NUMROUNDS;i++) {

//IY

if (i==tst )

cout << "LANGKAH 1: x1 adalah " << x1 << ", kunci adalah " << *keysbit16 << endl;

//LANGKAH 1 dari 14

x1 = (x1* (*keysbit16++)) % TWOPOWER161; //IY

if (i==tst )

cout << "\tSetelah mul, x1 adalah " << x1 << endl;

//IY

if (i==tst )

cout << "LANGKAH 2: x2 adalah " << x2 << ", kunci adalah " << *keysbit16 << endl; //LANGKAH 2 dari 14 x2 = (x2 + *keysbit16++) % TWOPOWER16; //IY if (i==tst )

cout << "\tSetelah add, x2 adalah " << x2 << endl;

//IY

if (i==tst )

cout << "LANGKAH 3: x3 adalah " << x3 << ", kunci adalah " << *keysbit16 << endl; //LANGKAH 3 dari 14 x3 = (x3 + *keysbit16++) % TWOPOWER16; //IY if (i==tst )

cout << "\tSetelah add, x3 adalah " << x3 << endl;

//IY

if (i==tst )

cout << "LANGKAH 4: x4 adalah " << x4 << ", kunci adalah " << *keysbit16 << endl; //LANGKAH 4 dari 14 x4 = (x4* (*keysbit16++)) % TWOPOWER161; //IY if (i==tst )

cout << "\tSetelah mul, x4 adalah " << x4 << endl;

//IY

if (i==tst)

cout << "LANGKAH 5: x3 adalah " << x3 << ", x1 adalah " << x1 << endl; //LANGKAH 5 dari 14 x5 = x1^x3; if (i==tst)

cout << "\tSetelah XOR, x5 adalah " << x5 << endl;

//IY

if (i==tst)

cout << "LANGKAH 6(outorder): x2 adalah " << x2 << ", x4 adalah " << x4 << endl; //LANGKAH 6 dari 14 x6 = x2^x4; //IY if (i==tst)

cout << "\tSetelah XOR, x6 adalah " << x6 << endl;

//IY

if (i==tst)

cout << "LANGKAH 7(outorder): x5 adalah " << x5 << ", kunci adalah " << *keysbit16 << endl;

//LANGKAH 7 dari 14

x7 = (x5* (*keysbit16++)) % TWOPOWER161;

if (i==tst)

cout << "\tSetelah mul, x7 adalah " << x7 << endl;

//IY

if (i==tst)

cout << "LANGKAH 8: x6 adalah " << x6 << ", x7 adalah " << x7 << endl; //LANGKAH 8 dari 14 x8 = (x6+x7) % TWOPOWER16; //IY if (i==tst)

cout << "\tSetelah ADD, x8 adalah " << x8 << endl;

//IY if (i==tst)

cout << "LANGKAH 9: x8 adalah " << x8 << ", kunci adalah " << *keysbit16 << endl;

//LANGKAH 9 dari 14 x9 = (x8* (*keysbit16++)) % TWOPOWER161; //IY if (i==tst)

cout << "\tSetelah mul, x9 adalah " << x9 << endl;

//IY

if (i==tst)

cout << "LANGKAH 10: x7 adalah " << x7 << ", x9 adalah " << x9 << endl; //LANGKAH 10 dari 14 x10 = (x7+x9) % TWOPOWER16; //IY if (i==tst)

cout << "\tSetelah add, x10 adalah " << x10 << endl; //LANGKAH 11,12,13,14 dari 14 x11=x1^x9; x12=x3^x9; x13=x2^x10; x14=x4^x10; if (i==tst ) {

cout << "\tLANGKAH 11: Setelah XOR, x11 adalah " << x11 << endl; cout << "\tLANGKAH 12: Setelah XOR, x12(Setelah swap) adalah " << x12 << endl;

cout << "\tLANGKAH 13: Setelah XOR, x13(Setelah swap) adalah " << x13 << endl;

cout << "\tLANGKAH 14: Setelah XOR, x14 adalah " << x14 << endl; }

//nilai baru untuk iterasi berikutnya x1=x11; x2=x12; x3=x13; x4=x14; if (writeflag==1) {

printf ("ROUND %d:\n", i+1); writeint = (x1<<16) + x2;

printf("\tBit 1 sampai 32 0x%08x\n",writeint); writeint = (x3<<16) + x4;

printf("\tBit 33 sampai 64 0x%08x\n\n",writeint); }

} // untuk setiap putaran

// transformasi output terakhir. modifikasi 4 subkunci seperti berikut:

y1 = (x11 * (*keysbit16++)) % TWOPOWER161; //flip flop kedua y (y1 & y2) berikut !! y3 = (x13 + *keysbit16++) % TWOPOWER16; y2 = (x12 + *keysbit16++) %TWOPOWER16; y4 = (x14 * (*keysbit16)) % TWOPOWER161; // letakkan data baru ke dalam buffer msgbit16=(unsigned short*)outmsg;

*msgbit16++ = y1; *msgbit16++ = y3; *msgbit16++ = y2; *msgbit16 = y4;

//*msgbit16++ = (y1 >>8) | (y1<<8); //*msgbit16++ = (y3 >>8) | (y3<<8); //*msgbit16++ = (y2 >>8) | (y2<<8); //*msgbit16 = (y4 >>8) | (y4<<8);

if (writeflag==1) {

unsigned int tempint;

printf ("SETELAH TRANSFORMASI OUTPUT DAN SWAP:\n"); msgbit16=(unsigned short*)outmsg;

tempint = (y1 <<16) + y3;

printf("\tBit 1 sampai 32 0x%08x\n",tempint); tempint = (y2 <<16) + y4;

printf("\tBit 33 sampai 64 0x%08x\n",tempint); }

} // akhir runIdea

//****************************************

// setiap blok terdiri dari 8 byte (64 bit), jadi // dilakukan loop sampai semua blok telah dienkripsi, // pada dasarnya menangani kerja runIdea

//****************************************

void encrypt (unsigned char* msg,unsigned char* outmsg,int writeflag) {

int blocks = inputsize/8; unsigned char* inptr=msg; unsigned char* outptr=outmsg; for(int i=0;i<blocks;i++) {

if (writeflag==1) {

printf ("\nHasil-hasil untuk Blok Data %d\n", i+1); printf ("=================================\n\n"); } runIdea(inptr,outptr,esubkeys,writeflag); inptr+=8; outptr+=8; } }//akhir enkripsi //************************************************** // setiap blok terdiri dari 8 byte (64 bit), jadi // dilakukan loop sampai semua blok telah didekripsi, // pada dasarnya menangani kerja runIdea

//**************************************************

void decrypt (unsigned char* msg,unsigned char* outmsg,int writeflag) {

int blocks = inputsize/8; unsigned char* inptr=msg; unsigned char* outptr=outmsg; for(int i=0;i<blocks;i++) {

if (writeflag==1) {

printf ("Hasil-hasil untuk Blok Data %d\n", i+1); printf ("=================================\n\n"); }

inptr+=8; outptr+=8; } } //akhir dekripsi //******************************************* // mencari invers dari angka 16 bit mod 2^16+1 // menggunakan algoritma extended euclidean //*******************************************

//unsigned short inv(unsigned short b) short inv(unsigned short b)

{

// sesuai dengan yang dikatakan buku jika mengambil mod 0 atau 1 if (b==0 || b==1) return b; // inisial variabel int a = 65536+1; // 2^16 + 1 int g0 = a; int g1 = b; int v0 = 0; int v1 = 1; int savev0; int q; int rem; int numloops = 0;

// memulai algoritma extended euglidean while (g1 != 0) { numloops++; q = g0/g1; rem = g0 % g1; g0=g1; g1 = rem; savev0=v0; v0 = v1; v1 = savev0 - (v1*q); } assert (g0==1);

// PENTING - jika diakhiri dengan angka negatif,

// untuk beberapa alasan, positifnya ekivalen dengan 1.

// jadi tambahkan 1 untuk mendapatkan nilainya jika hasil negatif ditemukan. if (v0 >1) return v0; else return 1+v0; } // akhir inv //****************************************** // Menampilkan 128 bit kunci asli dalam hex //****************************************** void printOrigKey()

printf ("Kunci asli dalam teks : %s\n\n",origkeychar); printf ("\tKunci asli 1st 32bits: 0x%08x\n",origkeyint[0]); printf ("\tKunci asli 2nd 32bits: 0x%08x\n",origkeyint[1]); printf ("\tKunci asli 3rd 32bits: 0x%08x\n",origkeyint[2]); printf ("\tKunci asli 4th 32bits: 0x%08x\n",origkeyint[3]); }

//********************************************* // Menampilkan 52 subkunci yg digunakan untuk // enkripsi dan dekripsi

//********************************************* void printKeys()

{

int count=1;

cout << "\n\n***** IKHTISAR SUBKUNCI ENKRIPSI DAN DEKRIPSI *****" <<endl;

cout << endl << "Semua subkunci adalah sepanjang 16-bit " <<endl<<endl;

printOrigKey();

for (int k=0; k<NUMSUBKEYS;k++) { if (k%6 ==0) {

cout <<"\nSubkunci Round Enkripsi " << count ;

cout <<" Subkunci Round Dekripsi " << count << endl; count++;

}

printf (" subkunci %02d 0x%08x",k,esubkeys[k]);

printf (" subkunci %02d 0x%08x\n",k,dsubkeys[k]); } }// akhir printKeys //**************************************** // bergantung pada 52 subkunci enkripsi,

// untuk menemukan 52 subkunci dekripsi (16 bit) //****************************************

void calcDKeys () {

//*** 1st,4th subkunci untuk setiap round for (int i=0;i<NUMSUBKEYS;i+=6) {

dsubkeys[i] = inv(esubkeys[48-i]); dsubkeys[i+3] = inv(esubkeys[48-i+3]); }

//*** 2nd, 3rd subkunci untuk setiap round dsubkeys[1] = -1 * esubkeys[49]; //first round dsubkeys[2] = -1 * esubkeys[50]; //first round

for (int i =7; i<NUMSUBKEYS;i+=6) { dsubkeys[i] = -1 * esubkeys[51-i]; dsubkeys[i+1] = -1 * esubkeys[50-i]; }

dsubkeys[49] = -1 * esubkeys[1]; //last round dsubkeys[50] = -1 * esubkeys[2]; //last round

//*** 5th, 6th subkunci untuk setiap round for (int i=4; i< (NUMSUBKEYS) ; i+=6) {

dsubkeys[i] = esubkeys[50-i]; dsubkeys[i+1] = esubkeys[51-i]; } int count=1;

for (int k=0; k<NUMSUBKEYS;k++) { if (k%6 ==0) {

//IY cout <<"\nDSUBKUNCI-SUBKUNCI UNTUK ROUND " << count << endl;

count++; }

//IY cout <<"subkunci " << k << " = " << dsubkeys[k]<<endl; }

} // akhir calcDKeys

//**************************************** // mengambil 128 bit kunci asli yang dilewati // sebagai array byte dan menghitung subkunci // enkripsi (totalnya 52 subkunci - 16 bit) //**************************************** void calcEKeys(unsigned char* userkey) {

//kunci dari contoh //char userkey[16];

//for(int i=0; i<16; i++) //userkey[i] = i+1; int firstbyte = 0;

// Gabungkan kedua bagian 8-bit menjadi satu 16 bit!!! // Hal ini dilakukan dengan pergeseran bit-bit.

// Sebagian besar logika dari fungsi ini disebabkan hal ini. for (int j=0; j<8;j++) { esubkeys[j] = (userkey[firstbyte] <<8) + userkey[firstbyte+1]; firstbyte = firstbyte+2; }

for (int f=8; f<NUMSUBKEYS-4;f+=8) { //Geser ke kiri 25 bit.

//Jika sedang di subkunci 1,maka diperoleh 7 bit terakhir subkunci 2,

//dan 9 bit pertama subkunci 2.

// 6 subkunci pertama for (int n=0;n<6;n++) {

esubkeys[f+n] = (short) ((esubkeys[f+n-7] <<9) | (esubkeys[f+n-6] >>7));

// 2 esubkeys berikutnya

esubkeys[f+6] = (short) ((esubkeys[f+6-7] <<9) | (esubkeys[f+6-6-8]>>7));

esubkeys[f+7] = (short) ((esubkeys[f+7-7-8] <<9) | (esubkeys[f+7-6-8]>>7));

}

// subkunci 48-51

esubkeys[NUMSUBKEYS-4] = (short) ((esubkeys[NUMSUBKEYS-4-7] <<9) | (esubkeys[NUMSUBKEYS-4-6] >>7));

esubkeys[NUMSUBKEYS-4+1] = (short) ((esubkeys[NUMSUBKEYS-4+1-7] <<9) | (esubkeys[NUMSUBKEYS-4+1-6] >>7));

esubkeys[NUMSUBKEYS-4+2] = (short) ((esubkeys[NUMSUBKEYS-4+2-7] <<9) | (esubkeys[NUMSUBKEYS-4+2-6] >>7));

esubkeys[NUMSUBKEYS-4+3] = (short) ((esubkeys[NUMSUBKEYS-4+3-7] <<9) | (esubkeys[NUMSUBKEYS-4+3-6] >>7));

int count=1;

for (int k=0; k<NUMSUBKEYS;k++) { if (k%6 ==0) {

//cout <<"\nSUBKUNCI-SUBKUNCI UNTUK ROUND " << count << endl; count++;

}

//cout <<"subkunci " << k<< " = " << esubkeys[k]<<endl; }

} //akhir calcEKeys

//**************************************** // keadaan bahwa program telah dimulai. //**************************************** void promptWelcome()

{

if (sizeof(unsigned short)!=2){

cout <<" Ukuran unsigned short bukan 2 byte. Silakan run pada flop.engr.orst.edu atau pada mesin lain. Program ini membutuhkan 2 byte untuk unsigned short untuk mensimulasikan subkunci 16-bit " <<endl;

exit(0); }

cout << endl <<endl;

cout << "*************** SELAMAT DATANG ******************" <<endl;

cout << "Ini adalah Program Pendukung Skripsi" <<endl<<endl; cout << "Implementasi Sistem Keamanan Data" <<endl;

cout << "Dengan Menggunakan Algoritma Kriptografi Simetri" <<endl;

cout << "IDEA (International Data Encryption Algorithm)" <<endl; cout << "*************************************************" <<endl;

cout << "oleh " <<endl;

cout << "*************************************************" <<endl;

cout << "Nama : Dewi Try Agustina" <<endl; cout << "NIM : 041401015" <<endl;

cout << "S1 Ilmu Komputer FMIPA USU" <<endl;

cout << "*************************************************" <<endl;

cout << "*************************************************" <<endl;

cout << endl <<endl; } //akhir promptWelcome

//**************************************** // Mendesak user untuk memasukkan plainteks // atau cipherteks lain. Memberikan nilai // pada array yang dilewatinya.

//****************************************

void promptForText(unsigned char* ptext,int encryptionflag) {

std::string str;

if (encryptionflag ==1)

cout << endl << "************ ENKRIPSI PLAINTEKS **********" <<endl<<endl;

else

cout << endl << "************ DEKRIPSI CIPHERTEKS **********" <<endl<<endl;

while (1) {

cout << "Ukuran Block Data adalah 8 bit. " <<endl;

cout << "Untuk itu, silakan masukkan 8, 16, 24, 32 karakter" <<endl<<endl;

if (encryptionflag ==1)

cout << "Plainteks yang kamu inputkan: "; else

cout << "Cipherteks yang kamu inputkan: ";

getline(cin, str);

if ((str.size() == 8) || (str.size()==16) || (str.size()==24) || (str.size()==32))

break; else

cout <<endl<< "ERROR: input adalah " << str.size()<< " sebagai ganti dari 8,16,24,32 karakter. Coba lagi" <<endl <<endl; }

inputsize = str.size();

for (int i=0;i<str.size();i++) { ptext[i] = str[i];

}

ptext[inputsize]='\0'; } //desakan untuk plainteks

//************************************************************** // program ini mendesak user untuk memasukkan kunci 128 bit. // karna kita ketahui bahwa 1 karakter = 1 byte = 8 bit,

// sehingga memasukkan 16 karakter sama dengan memasukkan 128 bit. // selanjutnya 16 karakter itu dikonversi menjadi 128 bit

//************************************************************** void promptForKey()

{

cout << "Keterangan : " <<endl;

cout << "IDEA beroperasi pada kunci berukuran 128-bit. " <<endl; cout << "User akan memasukan 16 karakter alfanumerik" <<endl;

cout << "16 karakter alfanumerik ini akan dikonversikan "<< endl; cout << "ke dalam kunci 128-bit. " <<endl;

cout << "(16 karakter * 8 bit = 128 bit)" <<endl;

cout << endl <<endl;

std::string str; while (1) {

cout << "Silakan masukkan 16 karakter alfanumerik , lalu tekan enter!" <<endl;

getline(cin, str);

if (str.size() == 16) break;

else

cout <<endl<< "ERROR: Itu bukan termasuk 16 karakter alfanumeric. " <<endl;

cout << " Silakan Coba lagi...!!!" <<endl<<endl; }

for (int i=0;i<16;i++) { origkeychar[i] = str[i];

}

origkeychar[16]='\0';

cout << endl << "Terima kasih banyak telah menginput."<<endl ;

//mengubah ke hex int firstbyte = 0;

for (int j=0; j<4;j++) {

//menggabungkan dua bagian 8-bit menjadi satu 16-bit

origkeyint[j] = (origkeychar[firstbyte] <<24) + (origkeychar[firstbyte+1]<<16) + (origkeychar[firstbyte+2]<<8) + (origkeychar[firstbyte+3]); firstbyte = firstbyte+4; } printOrigKey(); } //akhir promptForKey //**************************************** // mengeprint hex dan ascii plainteks //****************************************

void printPlainTextSummary(unsigned char* plaintext) {

plaintext[inputsize]='\0';

printf ("\n\nPlainteks kamu\n");

printf ("=================================\n");

printf ("Plainteks dalam ASCII: \"%s\"\n",plaintext); printf ("Plainteks dalam Hex:");

printHex(plaintext); }

//**************************************** // mengeprint hex cipherteks

//****************************************

void printCipherTextSummary(unsigned char* ciphertext) {

ciphertext[inputsize] = '\0';

printf ("=================================\n"); printf ("Cipherteks dalam Hex:");

printHex(ciphertext); }

//**************************************** // mengeprint hex dan ascii cipherteks // yang telah didekripsi

//****************************************

void printDecipherTextSummary(unsigned char* decipheredtext) {

decipheredtext[inputsize] = '\0';

printf ("\n\nDekripsi Cipherteks tersebut\n"); printf ("=================================\n");

printf ("Hasil dekripsi teks dalam ASCII: \"%s\"\n",decipheredtext);

printf ("Hasil dekripsi teks dalam Hex:"); printHex(decipheredtext);

}

//************************************************************* // LOOP MAIN PROGRAM! SECARA TERUS-MENERUS

// menyarankan user untuk menginput dan memproses permintaan //************************************************************* int main() { promptWelcome(); promptForKey();

//Catatan: kesampingkan kunci yg diinput user hanya untuk maksud testing

//unsigned char origkeychar[17]; //for(int i=0; i<16; i++)

//origkeychar[i] = i+1; //origkeychar[16]='\0'; calcEKeys(origkeychar); calcDKeys(); std::string str;

unsigned char ciphertext[MAXINPUTSIZE+1]; unsigned char decipheredtext[MAXINPUTSIZE+1]; unsigned char plaintext[MAXINPUTSIZE+1]; ciphertext[MAXINPUTSIZE] = '\0';

decipheredtext[MAXINPUTSIZE] = '\0'; unsigned int myint;

unsigned int* intptr;

//************************** //******** LOOP MAIN PROGRAM //**************************

while (1) {

cout << endl <<endl << "MENU UTAMA" <<endl; cout << "=========" <<endl<<endl;

cout << "Tekan 1 untuk menampilkan semua kunci Enkripsi/Dekripsi" <<endl;

cout << "Tekan 2 untuk mengenkripsi plainteks dengan menampilkan hasil" <<endl;

cout << "Tekan 3 untuk mendekripsi cipherteks dengan menampilkan hasil" <<endl;

cout << "Tekan 4 untuk mengenkripsi, lalu mendekripsi" << "(Tanpa menampilkan hasil)" <<endl;

cout << "Tekan 5 untuk keluar" <<endl<<endl; cout << "Pilihan kamu : " ;

getline(cin, str);

// bisa juga menggunakan statement switch if (str[0] == '1') printKeys(); else if (str[0]=='2') { promptForText(plaintext,1); encrypt(plaintext,ciphertext,1); printCipherTextSummary(ciphertext); } else if (str[0]=='3') { promptForText(ciphertext,0); decrypt(ciphertext,decipheredtext,1); printDecipherTextSummary(decipheredtext); } else if(str[0]=='4') { promptForText(plaintext,1); encrypt(plaintext,ciphertext,0); decrypt(ciphertext,decipheredtext,0); printPlainTextSummary(plaintext); printCipherTextSummary(ciphertext); printDecipherTextSummary(decipheredtext); } else if(str[0]=='5') {

cout << "Menutup program IDEA....Sampai jumpa lagi... " <<endl<<endl;

exit(0); } else {

cout <<"Error: Input salah, harus angka antara 1 sampai 5 !!! " <<endl;

}

} // akhir loop main program

return 0;

LAMPIRAN B: KODE ASCII

Dokumen terkait