Coding Monoalfabetik Chiper C++

 #include<bits/stdc++.h>


using namespace std;


string plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";


// Fungsi untuk ekstrak dan mapping kunci

string ekstrakKunci(string key) {

string encoded = ""; 

bool arr[26] = {0}; 


// Perulangan memasukkan kata kunci

for (int i=0; i < key.size(); i++) 

if(key[i] >= 'A' && key[i] <= 'Z') 

// Untuk memeriksa apakah karakter sudah dimasukkan

if (arr[key[i]-65] == 0) 

encoded += key[i]; 

arr[key[i]-65] = 1; 

else if (key[i] >= 'a' && key[i] <= 'z') 

if (arr[key[i]-97] == 0) 

encoded += key[i] - 32; 

arr[key[i]-97] = 1; 


// Perulangan ini memasukkan sisa dari kunci yang di input

for (int i=0; i<26; i++) 

if(arr[i] == 0) 

arr[i]=1; 

encoded += char(i + 65);

// cout << i << " Encoded " << encoded << endl; // (mapping kunci)

return encoded; 

}


// Fungsi untuk enkripsi

string enkripsi(string msg, string encoded) {

string cipher=""; 


// Perulangan ini memecahkan sandi pesan berupa karakter khusus, dan angka

for (int i = 0; i < msg.size(); i++) {

if (msg[i] >='a' && msg[i] <='z') {

int pos = msg[i] - 97; 

cipher += encoded[pos]; 

} else if (msg[i] >='A' && msg[i] <='Z') {

int pos = msg[i] - 65; 

cipher += encoded[pos]; 

} else {

cipher += msg[i]; 

}

return cipher; 

}



// Fungsi untuk dekripsi

string dekripsi(string msg, string encoded) {

// Mengecek posisi dari setiap karakter (A-Z)

map <char,int> enc; 

for(int i = 0; i < encoded.size(); i++) 

enc[encoded[i]]=i; 


string decipher=""; 


// Perulangan ini memecahkan sandi pesan berupa karakter khusus, dan angka

for (int i=0; i < msg.size(); i++) 

if (msg[i] >='a' && msg[i] <='z') 

int pos = enc[msg[i]-32]; 

decipher += plaintext[pos]; 

else if(msg[i] >='A' && msg[i] <='Z') 

int pos = enc[msg[i]]; 

decipher += plaintext[pos]; 

else

decipher += msg[i]; 

return decipher; 


int main() {

int menu, counter = 0;

string key = "";

string message = "";

char ulang = 'y';

while(ulang == 'y') {

cout << "Menu :" << endl;

cout << "1. Enkripsi" << endl;

cout << "2. Dekripsi" << endl;

cout << "Pilih menu = ";

cin >> menu;

if(menu == 1) {

cout << "\n1. Enkripsi" << endl;

cout << "Kunci = ";

cin >> key;

// Panggilan fungsi untuk menghasilkan teks yang disandikan

string encoded = ekstrakKunci(key);

cout << "PlainText = ";

cin >> message;

// Panggilan fungsi untuk mencetak teks tersandi

cout << "CipherText ? = " << enkripsi(message,encoded) << endl;

cout << ">> Kembali ke menu utama? (y/n) = ";

cin >> ulang;

} else {

cout << "\n2. Dekripsi" << endl;


cout << "Kunci = ";

cin >> key;

// Panggilan fungsi untuk menghasilkan teks yang disandikan

string encoded = ekstrakKunci(key); 

cout << "CipherText = ";

cin >> message;

// Panggilan fungsi untuk mencetak teks yang diuraikan

cout << "PlainText ? = " << dekripsi(message,encoded) << endl;

cout << ">> Kembali ke menu utama? (y/n) = ";

cin >> ulang;

}

counter++;

}

return 0;

}

Komentar