#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
Posting Komentar