//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;