IMPLEMENTASI ALGORITMA KRIPTOGRAFI CAESAR CHIPER DAN AFFINE CHIPER SEBAGAI KEAMANAN DATA APLIKASI RESTORAN Henny Vera Ningsih1, Novisa Rahmadani2, Pangeran Nicka3, Wandi Wahyudi4, H.Mhd Arief Hasan M.kom5 Program Studi Teknik Informatika Fakultas Ilmu Komputer Universitas Lancang Kuning Jl.Yos Sudarso KM.8 Rumbai, Pekanbaru, Riau, telp. 0811 753 2015 e-mail: 1 [email protected], 2 [email protected], 3 [email protected], 4 [email protected] Abstrak Salah satu aspek penting dari pengolahan data adalah masalah keamanan data dan kerahasiaan data. Adanya pencurian data dan penyalahgunaan data oleh kelompok yang tidak bersangkutan menyebabkan data tidak terjaga lagi. Oleh karena itu, dibutuhkan suatu keamanan yang bisa membuat data aman dari kelompok yang tidak bersangkutan. Data - data yang terdapat dalam suatu sistem pengolahan data diharapkan untuk mengamankan pihak yang tidak berhak tidak dapat mengaksesnya. Berdasarkan masalah tersebut, diperlukan teknik untuk mengamankan data. Teknik yang dikenal dapat digunakan untuk mengamankan data yaitu Kriptografi. Adapun algoritma kriptografi yang mudah untuk diterapkan namun mempunyai tingkat keamanan yang baik yaitu Caesar Chiper dan Affine Chiper. Kata Kunci - Pencurian Data, Keamanan Data, Caesar Chiper, Affine Chiper Abstract One of the important aspects of data processing is the issue of data security and data confidentiality. The existence of data theft and data misuse by unrelated groups causes data to be no longer maintained. Therefore, we need a security that can make data safe from unrelated groups. The data contained in a data processing system is expected to protect unauthorized parties from accessing it. Based on these problems, techniques are needed to secure data. A known technique that can be used to secure data is cryptography. The cryptographic algorithms that are easy to implement but have a good level of security are Caesar Chiper and Affine Chiper. Keywords - Data Theft, Data Security, Caesar ChiperAffine Cipher 1. PENDAHULUAN Keamanan dan kerahasiaan data atau informasi merupakan salah satu aspek yang penting dari suatu data atau informasi. Dengan perkembangan teknologi saat ini, setiap orang akan mudah memperoleh data atau informasi. Apabila data atau informasi tersebut tidak dilindungi, maka secara mudah orang lain akan mengetahui data atau informasi yang dimiliki. Berbagai cara pun dilakukan untuk melindungi data atau informasi tersebut. Ilmu yang mempelajari tentang proses pengamanan data atau informasi adalah kriptografi. Kriptografi (cryptographi) berasal dari Bahasa Yunani: “cryptos” artinya “secret” (rahasia). Sedangkan “graphein” artinya “writing” (tulisan).Dimana pemanfaatan kriptografi oleh manusia sejak empat abad lalu. Secara umum ada dua jenis kriptografi, yaitu: kriptografi klasik dan kriptografi modern. Kriptografi klasik telah digunakan digunakan sebelum era komputer. Pada penelitian ini menggunakan kriptografi klasik. Kriptografi klasik umumnya merupakan teknik penyandian dengan kunci tertentu dan menyembunyikan pesan yang memiliki arti ke sebuah pesan yang tidak memiliki arti. Adanya ketergantungan terhadap komputer dalam berbagai bidang membuat perpindahan informasi menjadi semakin cepat. Perpindahan informasi tersebut terkadang tidak diiringi oleh keamanan data yang sesuai. Pengamanan data menjadi sangat penting karena kemungkinan penggunaan file oleh orang lain yang tidak berwenang menjadi lebih besar.Berbagai teknik sering digunakan untuk mengamankan data, salah satunya yaitu kriptografi. Di Indonesia, kriptografi dikenal sebagai teknik penyandian untuk menyandikan data serta informasi dari pihak-pihak yang sekiranya tidak berwenang. Data yang ada atau terkandung pada file tersebut dienkripsi menjadi beberapa simbol tertentu sehingga pihak berwenang saja yang dapat mengetahui data/informasi hasil enkripsi. Pengertian lain dari kriptografi dikenal sebagai ilmu untuk mempelajari cara penyandian data untuk memperoleh kerahasiaan, integritas dan autentikasi data. Dalam kriptografi terdapat dua konsep utama, yaitu: enkripsi dan dekripsi. Proses kriptografi secara umum disajikan seperti Gambar 1. Plainteks Chiperteks Enkripsi Dekripsi Plainteks Gambar 1. Proses Enkripsi Deksripsi Enkripsi adalah proses dimana data atau informasi diubah menjadi bentuk yang hampir tidak dikenali sebagai informasi awalnya dengan menggunakan algoritma tertentu. Plainteks adalah pesan atau informasi yang akan dikirimkan dalam format yang mudah dibaca atau dalam bentuk aslinya.Dekripsi adalah proses mengubah kembali bentuk yang tersamar tersebut menjadi informasi awal. Banyak algoritma yang digunakan untuk melakukan pengamanan data, diantaranya: Caesar Chiper, Vigenere Chiper, Hill Chiper, dan Affine Chiper. Sedangkan algoritma kriptografi yang digunakan dengan mengkombinasikan algoritma Caesar Chiper dengan Affine Chiper. 2. LANDASAN TEORI 2.1 Kriptografi Kriptografi merupakan salah satu ilmu seni dengan filosofinya the art of war. Dimana pada saat itu digunakan untuk mengirim pesan rahasia pada zaman Romawi pada era raja Julius Caesar. Kriptografi adalah suatu metode untuk melindungi suatu data atau informasi dengan menggunakan sandi, dimanasandi tersebut hanya bisa dimengerti oleh orang yang berhak menerima data atau informasi tersebut.Sedangkan tujuan kriptografi adalah melindungi data dari ancaman yang disengaja atau tidak disengaja. Dewasa ini ancaman bertambah karena semakin meluasnya akses melalui internet atau teknologi bergerak.Aspek-aspek keamanan data dalam kriptografi adalah sebagai berikut : a. Confidentiality Merupakan usaha untuk menjaga kerahasiaan data. Serangan dalam aspek ini antara lain dilakukan dengan penyadapan, misalnya sniffer atau logger. b. Integrity Memastikan bahwa informasi yang dikirim tidak mengalami modifikasi oleh pihak yang tidak berhak. Serangan dapat berupa pengubahan data oleh orang yang tidak berhak. c. Availability Informasi harus tersedia ketika dibutuhkan. Serangan dapat berupa menghilangkan atau menghapus data. d. Authentication Meyakinkan keaslian data, sumber data, orang yang mengakses data, dan server yang digunakan. e. Access Control Aspek ini berhubungan dengan mekanisme pengaturan akses ke informasi, untuk mengatur siapa yang boleh melakukan apa. Dalam kriptografi sering ditemukan istilah-istilah penting untuk diketahui, diantaranya: - Pesan (message), adalah data atau informasi yang dapat dibaca atau dimengerti maknanya. - Pengirim (sender), adalah entitas yang melakukan pengiriman pesan kepada entitas lain. - Kunci (chiper), adalah aturan atau fungsi yang digunakan untuk melakukan proses enkripsi dan dekripsi pada plainteks dan chiperteks. - Enkripsiadalah mekanisme yang dilakukan untuk merubah plainteks menjadi chiperteks. - Dekripsi adalah mekanisme yang dilakukan untuk merubah chiperteks menjadi plainteks. - Penerima (recipient), adalah entitas yang penerima yang berhak menerima pesan dari pengirim. Algoritma kriptografi(cipher) adalah suatu fungsi matematis yang digunakan untuk melakukan enkripsi dan dekripsi [6]. Ada dua macam algoritma kriptografi, yaitu algoritma simetris (symmetric algorithms) dan algoritma asimetris (asymmetric algorithms). Algoritma simetris adalah algoritma kriptografi yang menggunakan kunci enkripsi yang sama dengan kunci dekripsinya. Algoritma ini mengharuskan pengirim dan penerima menyetujui suatu kunci tertentu sebelum mereka saling berkomunikasi. Keamanan algoritma simetris tergantung pada kunci, membocorkan kunci berarti bahwa orang lain dapat mengenkripsi dan mendekripsi pesan. Agar komunikasi tetap aman, kunci harus tetap dirahasiakan.Contoh dari algoritma kriptografi simetris adalah Cipher Permutasi, Cipher Substitusi, Cipher Hill, OTP, RC6, Twofish, Magenta, FEAL, SAFER, LOKI, CAST, Rijndael (AES), Blowfish, GOST, A5, Kasumi, DES dan IDEA. Algoritma asimetris, sering juga disebut dengan algoritma kunci publik, menggunakan dua jenis kunci, yaitu kunci publik (public key) dan kunci rahasia (secret key). Kunci publik merupakan kunci yang digunakan untuk mengenkripsi pesan. Sedangkan kunci rahasia digunakan untuk mendekripsi pesan. Contoh dari algoritma asimetris adalah RSA, ElGamal, McEliece, LUC dan DSA (Digital Signature Algorithm). 2.2 Caesar Chipher Caesar Cipher merupakan salah satu algoritma cipher tertua dan paling diketahui dalam perkembangan ilmu kriptografi. Caesar cipher merupakan salah satu jenis cipher substitusi yang membentuk cipher dengan cara melakukan penukaran karakter pada plainteks menjadi tepat satu karakter pada chiperteks. Teknik seperti ini disebut juga sebagai chiper abjad tunggal. Algoritma kriptografi Caesar Cipher sangat mudah untuk digunakan. Inti dari algoritma kriptografi ini adalah melakukan pergeseran terhadap semua karakter pada plainteks dengan nilai pergeseran yang sama. Adapun langkah- langkah yang dilakukan untuk membentuk chiperteks dengan Caesar Cipher adalah Menentukan besarnya pergeseran karakter yang digunakan dalam membentuk cipherteks ke plainteks. Menukarkan karakter pada plainteks menjadi cipherteks dengan berdasarkan pada pergeseran yang telah ditentukan sebelumnya.Algoritma dari Caesar Cipher adalah C = E ( P ) = ( P + K) mod 26 untuk fungsi enkripsi. Sedangkan untuk fungsi depenelitian adalah P = D ( C) = ( C - 7 ) mod 26 . 2.3 Affine Chiper Affine cipher adalah perluasan dari metode Caesar cipher yang menggunakan teknik substitusi yang menggunakan fungsi liniear ap+b untuk enkripsi teks asli p dan a-1c-b untuk dekripsi teks sandi c pada Z26. Kunci pada sandi Affine adalah 2 integer yaitu a dan b. Nilai a yang dapat dipakai adalah anggota elemen pada Z26 yang memiliki invers yaitu yang memenuhi gcd(a,26) = 1 [4]. Proses Enkripsi Affine Cipher adalah sebagai berikut. Affine cipher merupakan sandi yang bekerja secara subtitusi. Pada affine cipher terdapat abjad sejumlah m, yang yaitu rentang m-1, maksudnya adalah awal abjad yaitu huruf “A” bernilai 0, huruf kedua “B” bernilai 1, dan seterusnya hingga huruf terakhir dalam abjad yaitu huruf Adapun rumus enkripsi dengan menggunakan affine cipher pada satu huruf plaintext menjadi satu huruf ciphertext adalah sebagai berikut: E(x) = (ax + b) mod m, (4) Dimana m adalah ukuran abjad, ini berarti modulus m adalah modulus dari ukuran abjad, sedangkan jumlah abjad dalam rentang affine cipher adalah 25, maka modulus m adalah modulus 25. Sedangkan a adalah bilangan yang harus dipilih secara bebas, namun memiliki syarat haruslah coprime dengan nilai m, artinya harus memiliki nilai faktor yang positif. Proses Dekripsi Affine Cipher adalah sebagai berikut. Fungsi dekripsi affine cipher adalah: D(x) = a-1(x-b) mod m, (5) a-1 adalah invers perkalian a modulus m. Yaitu, memenuhi persamaan: 1 = aa-1 mod m. (6) Invers perkalian a hanya ada jika a dan m adalah coprime. Jika tidak maka proses algoritma [7][8][9][10]. “Z” bernilai 25 [5][6]. 2.4 Python Python merupakan bahasa pemrograman interpreatatif multiguna dengan filosofi perancangan yang berfokus pada tingkat keterbacaan kode. Bahasa pemograman Python disebut sebagai bahasa yang kemampuan, menggabungkan kapabilitas, dan sintaksis kode yang sangat jelas, dan juga dilengkapi dengan fungsionalitas pustaka standar yang besar serta komprehensif. Python adalah sebuah bahasa pemograman scripting tingkat tinggi atau high-level, interpreted, interactive, dan object-oriented. Python dengan desain yang sangat mudah di baca dan dipahami, karena sama seperti bahasa pemograman yang lainnya yaitu dengan menggunakan kata bahasa inggris. Selain itu juga lebih sedikit dalam penggunaan rumus atau syntac. - Interpreted : Python diproses pada saat runtime oleh interpreter, artinya Anda tidak perlu untuk mengkompilasi program Anda sebelum dijalankan. Sama seperti di bahasa pemograman PHP dan PERL - Interactive : Maksudnya Anda dapat secara langsung berinteraksi dan menafsirkan scripting menggunakan Prompt Python pada saat menulis program Anda - Object-oriented : Python juga mendukung sistem object-oriented atau teknik pemograman yang merangkum kode dalam objek. Python dibuat dan dikembangkan lebih lanjut oleh Guido Van Rossum, yaitu seorang programmer yang berasal dari Negara Belanda. Dibuat dan dikembangkan di kota Amsterdam, Belanda pada tahun 1990. Pada tahun 1995 Python dikembangkan lagi agar lebih kompatibel oleh Guido Van Rossum. Kemudian di awal tahun 2000 versi Python dikembangkan dan diperbaharui lagi sehingga kini Bahasa Pemrograman Python telah mencapai Versi 3. Sebenarnya awal mula dari kata ‘ Python ‘ Diambil oleh Guido Van Rossum dari sebuah acara televisi yang lumayan terkenal yang bernama Mothy Python Flying Circus, Yaitu sebuah acara sirkus yang disukai oleh Guido Van Rossum. Python mempunyai beberapa fitur unik di dalam bahasa pemrogramannya diantaranya sebagai berikut : - Bahasa pemrograman python memiliki tata bahasa dan script yang sangat mudah untuk dipelajari. - Bahasa pemrograman python dan memori yang otomatis. memiliki sistem pengelolaan data - Bahasa pemrograman python mempunyai modul yang baru dan selalu diperbaharui. - Bahasa pemrograman python memiliki banyak fasilitas pendukung dan memudahkan para penggunannya. - Bahasa pemrograman python sangat mudah dipahami seperti bahasa pemrograman lainnya. Python mendukung berbagai sistem operasi syntax. Python bisa dijalankan dan ditulis untuk membangun aplikasi di beragam sistem operasi. Yaitu : Linux/Unix, Microsoft Windows, Mac OS, Android, Java Virtual Machine, Symbian OS, Amiga, Palm, OS/2. 2.5 KOMODO IDE Komodo Edit adalah software editor program multi bahasa gratis yang dapat membuat penulisan kode program berkualitas menjadi mudah. Pengeditan program untuk bahasa dinamis termasuk Perl, PHP, Python, Ruby dan Tcl, ditambah dukungan kode browser sampling termasuk CSS, JavaScript, HTML, dan XHTML. Pemeriksaan sintaks latar belakang dan penawaran sintaks untuk menangkap kesalahan dengan segera, sementara auto komplit dan calltips membimbing Anda ketika menulis. Tersedia untuk Windows, Linux, dan Max OS X. 3. METODE 3.1 Enkripsi dan Deskripsi Caesar Chiper Caesar Cipher merupakan salah satu algoritma cipher tertua dan paling diketahui dalam perkembangan ilmu kriptografi. Caesar cipher merupakan salah satu jenis cipher substitusi yang membentuk cipher dengan cara melakukan penukaran karakter pada plainteks menjadi tepat satu karakter pada chiperteks.Teknik seperti ini disebut juga sebagai chiper abjad tunggal. Algoritma kriptografi Caesar Cipher sangat mudah untuk digunakan. Enkripsi Caesar Cipher Cara kerja enkripsi dari algoritma caesar cipher Proses Enkripsi (E) pada algoritma Caesar Chiper dalam fungsi E(x) = (Pi + K) mod 26 (1) Sedangkan proses Dekripsi (D) pada algoritma Caesar Chiper dalam fungsi D(x) = (Ci - K) mod 26 (2) Dimana Pi = plainteks ke-i, K = kunci, Ci = chiperteks ke-i Sebagai contoh diberikan plainteks “KUCING”, dengan kunci = 21, maka diperoleh chiperteks “FPXDIB”. Dimana proses enkripsi dengan menggunakan persamaan 1. Plainteks : KUCING Kunci 21 K= (10 + 21) mod 26 =5 F = (20 + 21) mod 26 = 15 P C = (2 + 21) mod 26 = 23 X I = (8 + 21) mod 26 =3 D N = (13 + 21) mod 26 =8 I G = (6 + 21) mod 26 =1 B Sedangkan proses dekripsi dengan menggunakan persamaan 2 Chiperteks : FPXDIB Kunci 21 F = (5 - 21) mod 26 =5 K P = (15 - 21) mod 26 = 20 U X = (23 - 21) mod 26 =2 C D = (3 - 21) mod 26 =8 I I = (8 - 21) mod 26 = 13 N B = (1 - 21) mod 26 =6 G U 3.2 Enkripsi dan Deskripsi Affine Chiper cara tarik Metode Affine cipher merupakan kriptografi dengan kunci simetris, yaitu jika kunci yang digunakan untuk enkripsi sama dengan kunci untuk dekripsi. Plainteks dikonversikan dengan tabel konversi, kemudian untuk memperoleh cipherteks, plainteks dienkripsi menggunakan persamaan : Misalkan plainteks SEMANGAT ‘45 akan dienkripsi dan didekripsi dengan menggunakan modifikasiAffine cipher yang diperkuat dengan Vigenere cipher, dengan kunci pertama , kunci kedua , dan kunci ketiga ( 121088). Plainteks dikonversikan kedalam Tabel 2, sehinggaSEMANGAT_‘45 menjadi 18 4 12 0 13 6 0 19 36 39 30 31, lalu dengan substitusikanhasil konversi ke Persamaan (1), Sehingga diperoleh masing-masing cipherteksdari Affine cipher(Tabel 3), Tabel 1. Aturan konversi pada modifikasi Affine cipher T a b AB e l 01 C ... 2 ... Z 0 1 25 26 2 7 2 3 4 5 6 7 8 28 29 3 0 3 1 32 3 3 3 4 9 _ . 35 36 3 7 , ‘ 38 3 9 Tabel 2. Enkripsi pada Affine cipher Plainteks Cipherteks sementara S E M A N G A T _ ‘ 18 4 12 0 13 6 0 36 61 19 43 7 46 2 5 7 1 9 6 4 21 19 3 7 6 7 35 D H G 2 5 Z 3 9 1 2 4 4 9 E V T 115 2 4 Y H 4 5 30 31 97 100 17 20 R U Cipherteks dari Affine cipher adalah VTDHGZHY9ERU, cipherteks dari Affine cipher dienkripsi dengan menggunakan Persamaa, diperoleh Cipherteks sementara : V T D H G Z H Y 9 E R U Kunci ketiga : 1 2 1 0 8 8 1 2 1 0 8 8 : 8 7 30 33 0 19 3 12 22 30 11 14 4 Cipherteks : I H 4 7 A T 8 M W 4 L O Cipherteksdari Vigenere ciphermerupakan cipherteks yang akan dikirim, yaitu IH47AT8MW4LO bearti pengerjaan selesai. Perangkat yang dikirim : IH47AT8MW4LO, 3, = 7, = 121088, dan aturan konversi (Tabel 2). Dekripsi pada modifikasi Affine cipher yang diperkuat dengan Vigenere cipher dilakukan dengan cara, cipherteks didekripsi menggunakan Persamaan, diperoleh Cipherteks : I H 4 7 A T 8 M W 4 L O Kunci ketiga : 1 2 1 0 8 8 1 2 1 0 8 8 : 21 19 3 7 6 25 7 24 35 4 17 20 Plainteks sementara : V T D H G Z H Y 9 E R U sehingga cipherteks IH47AT8MW4LO menjadi plainteks sementara yaitu VTDHGZHY9ERU. Plainteks sementara dikonversikan kedalam Tabel 2, sehingga plainteks sementara menjadi 21 19 3 7 6 25 7 24 35 4 17 20 dan didekripsi dengan Persamaan , Plainteks sementara V T D H G Z H Y 9 E R U 21 19 3 7 6 25 7 24 4 17 20 0 459 3 5 7 5 6 3 6 _ – 378 324 -108 0 -27 486 – 18 4 12 0 13 6 0 19 Plainteks S E M A N G A T - 270 351 8 1 3 30 31 9 ‘ 4 5 Tabel 3. Dekripsi pada Affine cipher Sehingga diperoleh plainteksdari modifikasi Affine cipher yang diperkuat dengan Vigenere cipher, yaitu SEMANGAT_’45. Tabel 4. Algoritma Modifikasi Affine cipheryang diperkuat dengan Vigenerecipher kamus : i, j, h, sebagai bilangan Real c, d, m, n, o, p, q sebagai bilangan Bulat plaintext sebagai bilangan Bulat chipertext1 sebagai bilangan Bulat chipertext2 sebagai bilangan Bulat vigenerekey sebagai bilangan Bulat s sebagai huruf/teks Input plainteks Untuk i = 1 sampai panjang karakter pada text c = kode ascii dari karakter ke-i pada Text Jika 65 ≤ c ≤ 90 Maka plaintext = c – 65 Jika 97 ≤ c ≤ 122 Maka plaintext = c – 97 Jika 48 ≤ c ≤ 57 Maka plaintext = c – 22 Jika c = 32 Maka plaintext = 36 Jika c = 46 Maka plaintext = 37 Jika c = 44 Maka plaintext = 38 Jika c = 39 Maka plaintext = 39 Input kunci1 “Mencari relatif prima” dengan n=nilai kunci1, m=40 dan n berisi bilangan tak nol, lakukan perulangan sampai p=0 dan q=1 q=n, p= m mod n, m=n, n=p, Input kunci2 dipilih bebas dari 1 sampai dengan 39 Enkripsi plainteks: chipertext1=(kunci1* plaintext+kunci2) mod 40 Input kunci3/vigenerekey: j = panjangnya karakter pada kunci3 Untuk i = 1 sampai panjang karakter pada text “mencari pasangan kunci3 dengan plainteks” Jika i mod j = 0 maka h = j dan selain itu h = i mod j d = kode ascii dari karakter ke-h pada kunci3 Jika 65 ≤ d ≤ 90 Maka vigenerekey = d – 65 Jika 97 ≤ d ≤ 122 Maka vigenerekey = d – 97 Jika 48 ≤ d ≤57 Maka vigenerekey = d – 22 Jika d = 32 Maka vigenerekey = 36 Jika d = 46 Maka vigenerekey = 37 Jika d = 44 Maka vigenerekey = 38 Jika d = 39 Maka vigenerekey = 39 Enkripsi plainteks: chipertext2 = (chipertext1 + vigenerekey)mod 40 kamus : i, j, h, sebagai bilangan Real c, d, m, n, o, p, q, r, z sebagai bilangan Bulat plaintext sebagai bilangan Bulat chipertext1 sebagai bilangan Bulat chipertext2 sebagai bilangan Bulat vigenerekey sebagai bilangan Bulat s sebagai huruf/teks Input cipherteks Untuk i = 1 sampai panjang karakter pada text c = kode ascii dari karakter ke-i pada Text Jika 65 ≤ c ≤ 90 maka ciphervigenere = c – 65 Jika 97 ≤ c ≤ 122 maka ciphervigenere =c-97 Jika 48 ≤ c ≤ 57 maka ciphervigenere = c – 22 Jika c = 32 maka ciphervigenere = 36 Jika c = 46 maka ciphervigenere = 37 Jika c = 44 maka ciphervigenere = 38 Jika c = 39 maka ciphervigenere = 39 Input kunci3/vigenerekey: j = panjangnya karakter pada kunci3 Untuk i = 1 sampai panjang karakter pada text “mencari pasangan kunci3 dengan plainteks” Jika i mod j = 0 maka h = j dan selain itu h = i mod j d = kode ascii dari karakter ke-h pada kunci3 Jika 65 ≤ d ≤ 90 Maka vigenerekey = d – 65 Jika 97 ≤ d ≤ 122 Maka vigenerekey = d – 97 Jika 48 ≤ d ≤57 Maka vigenerekey = d – 22 Jika d = 32 Maka vigenerekey = 36 Jika d = 46 Maka vigenerekey = 37 Jika d = 44 Maka vigenerekey = 38 Jika d = 39 Maka vigenerekey = 39 Dekripsi cipherteks: r = 39 dan q= 40 Lakukan sampai q = ciphervigenere : q = (r + vigenerekey) mod 40 cipheraffine = r, r = r -1 Input kunci1: “Mencari relatif prima” dengan n=nilai kunci1, m=40 dan n berisi bilangan tak nol, lakukan perulangan sampai p=0 dan q=1 q=n, p= m mod n, m=n, n=p, Input kunci2 dipilih bebas dari 1 sampai dengan 39 Output: diketahui s = “ “ Jika cipherteks2 ≤ 25 Maka c = cipherteks2 + 65 Jika 26 ≤ cipherteks2≤ 35 Maka c= cipherteks2+22 Jika cipherteks2 = 36 Maka c = 32 Jika cipherteks2 = 37 Maka c = 46 Jika cipherteks2 = 38 Maka c = 44 Jika cipherteks2 = 39 Maka c = 39 s = s + karakter huruf dari c Text = s Dekripsi cipherteks: z = 39 dan r= 40 Lakukan sampai r = cipheraffine r = ((kunci1 * z) + kunci2) mod 40 plaintext = z, z = z – 1 Output: diketahui s = “ “ Jika plaintext ≤ 25 Maka c = plaintext + 65 Jika 26 ≤ plaintext ≤ 35 Maka c= plaintext +22 Jika plaintext = 36 Maka c = 32 Jika plaintext = 37 Maka c = 46 Jika plaintext = 38 Maka c = 44 Jika plaintext = 39 Maka c = 39 s = s + karakter huruf dari c Text =s 4.HASIL DAN PEMBAHASAN 4.1 SubCode Caesar Chiper print(" Program Enkripsi Caesar Restoran") abjad = ['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'] def enkripsi(abjad): str = input("String : ") key = int(input("Key : ")) str = str.lower() result = '' for char in str: if char in abjad: n = abjad.index(char) encrypt = (n - key) % 26 convert = abjad[encrypt] result = result + convert else: result = result + ' ' print(f"Result : {result}") def dekripsi(abjad): str = input("String Enkripsi : ") key = int(input("Key : ")) str = str.lower() result = '' for char in str: if char in abjad: n = abjad.index(char) encrypt = (n + key) % 26 convert = abjad[encrypt] result = result + convert else: result = result + ' ' print(f"Result : {result}") # pembuatan menu pilihan = 'y' while (pilihan == 'y'): print("Menu yang tersedia : ") print("01. Enkripsi Data") print("02. Dekripsi Data") print("03. Keluar") menu = input("Menu yang dipilih : ") print("-------------------------------------") if menu == '1': print("Menu Enkripsi Data") enkripsi(abjad) elif menu == '2': print("Menu Dekripsi Data") dekripsi(abjad) elif menu == '3': print("Program Selesai, terima kasih.") break else: print("Menu tidak ditemukan") print("------------------------------------") pilihan = input("Apakah ingin melanjutkan ? (Y/n) : ") print("------------------------------------") Tabel 5. Subcode Caesar Chiper import string def caesar_encrypt(data,key): res = "" for x in range(len(data)): if data[x].isupper(): pos = string.ascii_uppercase.index(data[x]) + key pos = pos % 26 res += string.ascii_uppercase[pos] elif data[x].islower(): pos = string.ascii_lowercase.index(data[x]) + key pos = pos % 26 res += string.ascii_lowercase[pos] else: res += data[x] return res def caesar_decrypt(data,key): res = "" for x in range(len(data)): if data[x].isupper(): pos = string.ascii_uppercase.index(data[x]) - key pos = pos % 26 res += string.ascii_uppercase[pos] elif data[x].islower(): pos = string.ascii_lowercase.index(data[x]) - key pos = pos % 26 res += string.ascii_lowercase[pos] else: res += data[x] return res def main(): enc = caesar_encrypt("Pengamanan Data Aplikasi Restoran",17) print(enc) dec = caesar_decrypt(enc,17) print(dec) if __name__ == "__main__": main() Tabel 6. Subcode program Caesar Chiper 4.2 SubCode Affine Chiper import sys, pyperclip, kriptomath, random SYMBOLS = """ !"#$%&'()*+,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy z{|}~""" def main(): pesanSaya = """"Implementasi Alagoritma Kriptografi chesar chiper dan Permutasi chiper sebagai pengamanan data Aplikasi Restoran""" kunciSaya = 2022 modeSaya = 'enkripsi' if modeSaya == 'enkripsi': ubah = enkripsiPesan(kunciSaya, pesanSaya) elif modeSaya == 'dekripsi': ubah = dekripsiPesan(kunciSaya, pesanSaya) print('Kunci: %s' % (kunciSaya)) print('%si :' % (modeSaya.title())) print(ubah) pyperclip.copy(ubah) print('Seluruh %s teks telah disalin.' % (modeSaya)) def cariBagianKunci(kunci): kunciA = kunci // len(SYMBOLS) kunciB = kunci % len(SYMBOLS) return (kunciA, kunciB) def cekKunci(kunciA, kunciB, mode): if kunciA == 1 and mode == 'enkripsi': sys.exit('Sandi Affine akan menjadi lebih lemah ketika A di tentukan menjadi 1. Silahkan pilih kunci yang berbeda.') if kunciB == 0 and mode == 'enkripsi': sys.exit('Sandi Affine akan menjadi lebih lemah ketika B di tentukan menjadi 0. Silahkan pilih kunci yang berbeda.') if kunciA < 0 or kunciB < 0 or kunciB > len(SYMBOLS) - 1: sys.exit('Kunci A harus lebih besar daripada 0 dan kunci B harus ada diantara 0 dan %s.' % (len(SYMBOLS) - 1)) if kriptomath.gcd(kunciA, len(SYMBOLS)) != 1: sys.exit('Kunci A (%s) dan simbol ukuran yang ditentukan (%s) secara realtif bukanlah yang paling utama. Silahkan pilih kunci yang berbeda.' % (kunciA, len(SYMBOLS))) def enkripsiPesan(kunci, pesan): kunciA, kunciB = cariBagianKunci(kunci) cekKunci(kunciA, kunciB, 'enkripsi') sanditeks = '' for symbol in pesan: if symbol in SYMBOLS: symIndex = SYMBOLS.find(symbol) sanditeks += SYMBOLS[(symIndex * kunciA + kunciB) % len(SYMBOLS)] else: sanditeks += symbol return sanditeks def dekripsiPesan(kunci, pesan): kunciA, kunciB = cariBagianKunci(kunci) cekKunci(kunciA, kunciB, 'dekripsi') teksawal = '' kunciUntukMembalikkanA = kriptomath.cariModMembalikkan(kunciA, len(SYMBOLS)) for symbol in pesan: if symbol in SYMBOLS: symIndex = SYMBOLS.find(symbol) teksawal += SYMBOLS[(symIndex - kunciB) * kunciUntukMembalikkanA % len(SYMBOLS)] else: teksawal += symbol return teksawal def menentukanKunciAcak(): while True: kunciA = random.randint(2, len(SYMBOLS)) kunciB = random.randint(2, len(SYMBOLS)) if kriptomath.gcd(kunciA, len(SYMBOLS)) == 1: return kunciA * len(SYMBOLS) + kunciB if __name__ == '__main__': main() Tabel 7. Subcode Affine Chiper import sys, pyperclip, kriptomath, random SYMBOLS = """ !"#$%&'()*+,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy z{|}~""" def main(): pesanSaya = """"Implementasi Alagoritma Kriptografi chesar chiper dan Permutasi chiper sebagai pengamanan data Aplikasi Restoran""" kunciSaya = 2022 modeSaya = 'enkripsi' if modeSaya == 'enkripsi': ubah = enkripsiPesan(kunciSaya, pesanSaya) elif modeSaya == 'dekripsi': ubah = dekripsiPesan(kunciSaya, pesanSaya) print('Kunci: %s' % (kunciSaya)) print('%si :' % (modeSaya.title())) print(ubah) pyperclip.copy(ubah) print('Seluruh %s teks telah disalin.' % (modeSaya)) def cariBagianKunci(kunci): kunciA = kunci // len(SYMBOLS) kunciB = kunci % len(SYMBOLS) return (kunciA, kunciB) def cekKunci(kunciA, kunciB, mode): if kunciA == 1 and mode == 'enkripsi': sys.exit('Sandi Affine akan menjadi lebih lemah ketika A di tentukan menjadi 1. Silahkan pilih kunci yang berbeda.') if kunciB == 0 and mode == 'enkripsi': sys.exit('Sandi Affine akan menjadi lebih lemah ketika B di tentukan menjadi 0. Silahkan pilih kunci yang berbeda.') if kunciA < 0 or kunciB < 0 or kunciB > len(SYMBOLS) - 1: sys.exit('Kunci A harus lebih besar daripada 0 dan kunci B harus ada diantara 0 dan %s.' % (len(SYMBOLS) - 1)) if kriptomath.gcd(kunciA, len(SYMBOLS)) != 1: sys.exit('Kunci A (%s) dan simbol ukuran yang ditentukan (%s) secara realtif bukanlah yang paling utama. Silahkan pilih kunci yang berbeda.' % (kunciA, len(SYMBOLS))) def enkripsiPesan(kunci, pesan): kunciA, kunciB = cariBagianKunci(kunci) cekKunci(kunciA, kunciB, 'enkripsi') sanditeks = '' for symbol in pesan: if symbol in SYMBOLS: symIndex = SYMBOLS.find(symbol) sanditeks += SYMBOLS[(symIndex * kunciA + kunciB) % len(SYMBOLS)] else: sanditeks += symbol return sanditeks def dekripsiPesan(kunci, pesan): kunciA, kunciB = cariBagianKunci(kunci) cekKunci(kunciA, kunciB, 'dekripsi') teksawal = '' kunciUntukMembalikkanA = kriptomath.cariModMembalikkan(kunciA, len(SYMBOLS)) for symbol in pesan: if symbol in SYMBOLS: symIndex = SYMBOLS.find(symbol) teksawal += SYMBOLS[(symIndex - kunciB) * kunciUntukMembalikkanA % len(SYMBOLS)] else: teksawal += symbol return teksawal def menentukanKunciAcak(): while True: kunciA = random.randint(2, len(SYMBOLS)) kunciB = random.randint(2, len(SYMBOLS)) if kriptomath.gcd(kunciA, len(SYMBOLS)) == 1: return kunciA * len(SYMBOLS) + kunciB if __name__ == '__main__': main() Tabel 6. Subcode program Affine Chiper 4.3 Tampilan Hasil Program pada Python Gambar 2. Tampilan program pada Python Gambar 3. Tampilan hasil program pemesanan makanan Gambar 4. Tampilan hasil program menggunakan code Gambar 5. Tampilan melalui kunci/sandi 5.KESIMPULAN DAN SARAN 5.1 KESIMPULAN Berdasarkan hasil penelitian dapat disimpulkan bahwa: 1. Kombinasi algoritma kriptografi Caesar Chiper dan Vigenere Chiper dapat digunakan untuk mengirim pesan rahasia. 2. Algoritma yang dikembangkan dapat mengamankan proses pengiriman pesan dari server ke klien ataupun sebaliknya. 3. Aplikasi chatting sederhana mampu mengimplementasikan algoritma kriptografi yang dikembangkan dalam penelitian ini. 5.2 SARAN 1. Penelitian selanjutnya diharpkan mampu menambah keamanan dari algoritma yang sudah dikembangkan di dalam penelitian ini. 2. Penelitian penyederhanaan hasil keluaran dari proses enkripsi dapat dilakukan 3. Penelitian tentang kriptanalisis dapat dilakukan untuk mencoba kekuatan dari algoritma yang sudah dikembangkan. DAFTAR PUSTAKA [1] Kurniawan, Y. (2004). Kriptografi Keamanan Internet dan Jaringan Komunikasi. Bandung: Informatika. [2] Novi Dian Nathasia, Anang Eko Wicaksono. 2011 .Penerapan Teknik Kriptografi [3] Stream Chiper Untuk Pengamanan Basis Data. Jurnal Basis Data, ICT Research Center UNAS. [4] Munawar. 2012. Perancangan Algorithma Sistem Keamanan Data Menggunakan Metoda Kriptografi Asimetris. Jurnal Komputer dan Informatika. [5] Seftyanto, Donny. 2012. Peran Algoritma Caesar Cipher Dalam Membangun Karakter Akan Kesadaran Keamanan Informasi. Seminar Nasional Matematikan dan Pendidikan Matematikan FMIPA UNY. November 2012 : MP 883-890 [6] Rahima. 2014. Implementasi Penyembunyian dan Penyandian Pesan Pada Citra Menggunakan Algoritma Affine Cipher dan Metode Least Significant Bit. Pelita. [7] Sadikin, R., 2012, Kriptografi Untuk Keamanan Jaringan, Andi, Yogyakarta [8] Sasongko, J., 2005, Pengamanan Data Informasi Menggunakan Kriptografi Klasik, Jurnal Teknologi Informasi DINAMIK Vol X No. 3 ISSN 0854-9524 pp 160-167. [9] Fitriasih, I., Prayitno, TB., Sidopekso, S., 2012, Studi Model Kriptografi Klasik (Review), Jurnal Fisika dan Aplikasinya Vo. 13 Edisi 1 pp 6-11. [10] Doni, dan Walad, A., 2012, Caesar Chiper VS Vigenere Chiper, Jurnal LPKIA Vol 1 No 3 pp 12-16.