Copy Link
Add to Bookmark
Report
Echo Magazine Issue 20 Phile 0x006
o.OOoOoo o OoooOOoO
O O o o
o o O
ooOO O o
O .oOo OoOo. .oOo. O O 'OoOo. .oOo.
o O o o O o o o o O OooO'
O o o O o O O O O o O
ooOooOoO `OoO' O o `OoO' OOooOooO o' o O `OoO'
Echo Magazine Volume VII, Issue XX, Phile 0x06.txt
]=========[[Caesar Shift Cipher]]=========o
Brought To You By : Rey
http://www.callmerey.co.cc/
enreina [[AT]] gmail.com
======= Pendahuluan ---|
Caesar Shift adalah salah satu teknik enkripsi yang paling sederhana. Dinamakan
Caesar karena digunakan oleh Julius Caesar, seorang pemimpin militer dan
politikus Romawi. Caesar cipher banyak digunakan sebagai bagian dari enkripsi
yang lebih rumit.
Di artikel ini, akan dijelaskan pembuatan cipher Caesar Shift sederhana dengan
menggunakan bahasa pemrograman C++.
====== Tujuan ---|
Tujuan artikel ini adalah untuk memberikan gambaran bagaimana cryptography
sederhana bekerja. Maka dari itu, Caesar Shift yang dipilih untuk pembuatan
cipher ini.
====== Cara Kerja Caesar Shift ---|
Misalnya, alamat 'echo.or.id' bila dienkripsikan menggunakan Caesar Shift
menggunakan pergeseran huruf sebanyak 13 huruf :
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
E = R
C = P
H = U
O = B
R = E
I = V
D = Q
echo.or.id akan menjadi rpub.be.vq
Sedangkan jika menggunakan pergeseran sebanyak 17 huruf maka :
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
E = V
C = T
H = Y
O = F
R = I
I = Z
D = U
echo.or.id menjadi vtyf.fi.zu
====== Pembuatan Encryptor/Decryptor Caesar Shift ---|
Buatlah file berekstensi .cpp di notepad (atau C++ IDE). Berikut kode program
serta penjelasannya.
--mulai kode--
#include <iostream>
#include <string>
int main() {
std::string lowerCase = "abcdefghijklmnopqrstuvwxyz";
std::string upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
--akhir kode--
Pada kode di atas, kita mengikutsertakan library iostream untuk input output
data, dan library string untuk memproses string.
Lalu dalam function main, kita buat 2 variabel string. Variabel yang pertama
(lowerCase) berguna untuk menyimpan alfabet dalam huruf kecil, dan pada variabel
kedua (upperCase) kita gunakan untuk menyimpan alfabet huruf kapital. 2 variabel
ini nantinya digunakan untuk meng-encrypt kata/kalimat.
--mulai kode--
std::string strInput;
std::string strOutput;
int shift = 0;
int found;
--akhir kode--
Selanjutnya, masih dalam function main, kita buat beberapa variabel lagi yaitu :
- strInput : untuk menyimpan input user (unencrypted text)
- strOutput : untuk menyimpan output (encrypted text)
- shift : variabel pergeseran
- found : variabel untuk menyimpan angka index pada lowerCase/upperCase di mana
huruf dari strInput berada.
--mulai kode--
std::cout << "Masukkan kata yang ingin diencrypt lalu enter: ";
getline(std::cin, strInput);
--akhir kode--
Di sini kita meminta user untuk memasukkan huruf/kata/kalimat yang ingin
dienkripsikan.
--mulai kode--
while (shift == 0 || shift > 25) {
std::cout << "Masukkan banyaknya pergeseran:";
std::cin >> shift;
if (shift > 25) {
std::cout << "Tidak bisa lebih dari 25!\n";
}
}
--akhir kode--
Nah, sekarang kita meminta user untuk memasukkan banyaknya pergeseran yang akan
dipakai buat enkripsi nanti. Kenapa pake while? Karena pergeseran ini tidak
boleh 0 atau lebih besar dari 25, untuk itulah program akan meminta input dari
user terus menerus sampe variabel shift (pergeseran) tidak sama dengan nol
dan lebih kecil dari 25.
--mulai kode--
for (int i=0;i<strInput.length();i++) {
found = lowerCase.find(strInput.at(i));
if (found == std::string::npos) {
found = upperCase.find(strInput.at(i));
if (found == std::string::npos) {
strOutput.push_back(strInput.at(i));
}
else {
if (found+shift >= 26) {
strOutput.push_back(upperCase.at(found+shift - 26));
}
else {
strOutput.push_back(upperCase.at(found+shift));
}
}
}
else {
if (found+shift >= 26) {
strOutput.push_back(lowerCase.at(found+shift - 26));
}
else {
strOutput.push_back(lowerCase.at(found+shift));
}
}
}
--akhir kode--
Ini kode lengkap dalam pengenkripsian menggunakan Caesar Shift. Kita lakukan
loop pada setiap huruf dalam variabel strInput.
found = lowerCase.find(strInput.at(i))
Index huruf ke-i strInput dalam lowerCase disimpan dalam variabel found.
Contoh :
echo.or.id -> huruf pertama(i = 0) adalah e. Dalam variabel lowerCase, huruf e
berada pada index 4 (penghitungan index dimulai dari 0). Sehingga found dalam
loop pertama menyimpan nilai 4.
Selanjutnya jika huruf tidak ditemukan di lowerCase, fungsi find akan
mengembalikan variabel string::npos (lihat referensi[1] untuk lebih lengkap).
Sehingga pada blok "if (found == std::string::npos)" dilakukan pencarian huruf
di upperCase (huruf kapital) dan jika tidak ditemukan lagi, berarti karakternya
berupa simbol (titik, koma, tanda seru) dan langsung di masukkan ke dalam
strOutput menggunakan fungsi push_back.
Jika huruf ditemukan pada lowerCase atau upperCase, akan dilakukan pergeseran
huruf dengan ilustrasi sebagai berikut bila shift = 13.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Pada echo.or.id, huruf pertama adalah 'e' yaitu index ke-4 pada upperCase
maupun lowerCase (tergantung input user menggunakan huruf kapital atau huruf
kecil). Berarti :
found = 4
found + shift = 4 + 13 = 17.
Found+shift adalah 17 sehingga huruf 'r' akan dimasukkan ke dalam variabel
strOutput.
Bagaimana jika found+shift lebih besar dari 26 (jumlah alfabet adalah 26)?
Digunakan lah "if (found+shift >= 26)" (menggunakan >= karena index huruf
dimulai dari 0 sehingga huruf z berindex 25)
Ambil contoh adalah huruf 'o', berada pada index 14 pada upperCase maupun
lowerCase.
found = 14
found + shift = 14 + 13 = 27.
Dan ternyata 27 >= 26. Maka huruf yang di masukkan adalah :
found + shift - 26 = 27 - 26 = 1.
Index ke-1 berarti adalah 'b'.
Sehingga loop ini berfungsi memasukkan huruf hasil pergeseran satu per satu ke
dalam strOutput, hal terakhir yang perlu kita lakukan adalah menampilkan
variabel output ke layar :
--Mulai Kode--
std::cout << strOutput << "\n";
return 0;
}
--akhir kode--
Compile-lah file cpp tersebut (silakan googling jika belum pernah mengcompile),
dan coba menjalankan program. Happy encrypting!
====== Source Code ---|
//Caesar Shift Cipher e20_0x06.txt proof of concept //
//Rey - http://www.callmerey.co.cc/
#include <iostream>
#include <string>
int main() {
std::string lowerCase = "abcdefghijklmnopqrstuvwxyz";
std::string upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string strInput;
std::string strOutput;
int shift = 0;
int found;
std::cout << "Masukkan kata yang ingin diencrypt lalu enter: ";
getline(std::cin, strInput);
while (shift == 0 || shift > 25) {
std::cout << "Masukkan banyaknya pergeseran:";
std::cin >> shift;
if (shift > 25) {
std::cout << "Tidak bisa lebih dari 25!\n";
}
}
for (int i=0;i<strInput.length();i++) {
found = lowerCase.find(strInput.at(i));
if (found == std::string::npos) {
found = upperCase.find(strInput.at(i));
if (found == std::string::npos) {
strOutput.push_back(strInput.at(i));
}
else {
if (found+shift >= 26) {
strOutput.push_back(upperCase.at(found+shift - 26));
}
else {
strOutput.push_back(upperCase.at(found+shift));
}
}
}
else {
if (found+shift >= 26) {
strOutput.push_back(lowerCase.at(found+shift - 26));
}
else {
strOutput.push_back(lowerCase.at(found+shift));
}
}
}
std::cout << strOutput << "\n";
return 0;
}
====== Source Code ---|
======= Penutup ---|
Demikian cara pembuatan sebuah cipher sederhana. Diharapkan pembaca dapat
mengikuti dan mengerti dasar cara kerja Caesar Shift Cipher tersebut. Maaf,
untuk kesalahan-kesalahan yang ditulis oleh penulis. Semoga tulisan ini
bermanfaat.
======= Referensi ---|
[1] http://cplusplus.com/reference/string/string/
[2] http://en.wikipedia.org/wiki/Caesar_cipher
Echo Magazine Volume VII, Issue XX, Phile 0x06.txt