You are on page 1of 29

TUGAS MATEMATIKA DISKRIT

KRIPTOGRAFI RSA

Kelompok 2 Janson Hendryli (535080020) Ani Ratna (535080034) Tryanto (535080052) William Surya (535080086)

DAFTAR ISI
DAFTAR ISI .................................................................................................................... BAB I PENDAHULUAN ........................................................................................... 1.1 Latar Belakang ........................................................................................... 1.2 Tujuan ........................................................................................................ 1.3 Manfaat ...................................................................................................... BAB II PEMBAHASAN .............................................................................................. 2.1 Sejarah Kriptografi .................................................................................... 2.2 Algoritma Kriptografi RSA ........................................................................ 2.3 Program Artic ............................................................................................. BAB III PENUTUP ........................................................................................................ 3.1 Kesimpulan ................................................................................................ 3.2 Saran-saran.................................................................................................. DAFTAR PUSTAKA ...................................................................................................... LAMPIRAN ..................................................................................................................... 2 3 3 3 3 4 4 6 8 11 11 11 12 13

BAB I PENDAHULUAN
1.1 Latar Belakang
Laporan ini dibuat sebagai tugas dari mata kuliah Matematika Diskrit. Laporan ini akan membahas mengenai teknik penyandian atau penyamaran informasi dalam bentuk kode-kode atau simbol-simbol rahasia, yang dikenal dengan kriptografi. Ada bermacam-macam teknik kriptografi ini seperti teknik yang menggunakan symmetric key dan public key cryptography. Teknik yang akan dibahas dalam laporan ini adalah kriptografi dengan menggunakan salah satu public key cryptography, yaitu RSA.

1.2 Tujuan
Adapun tujuan dari pembuatan laporan dan program ini adalah antara lain : 1. Menjelaskan mengenai kriptografi dengan menggunakan algoritma RSA 2. Membuat program aplikasi RSA yang dapat digunakan

1.3 Manfaat
1. Dengan laporan ini kelompok dan mahasiswa lainnya dapat mengerti lebih lanjut mengenai kriptografi, terutama dengan menggunakan algoritma RSA. 2. Memberikan contoh langsung aplikasi dari algoritma RSA dalam kriptografi.

BAB II PEMBAHASAN
2.1 Sejarah Kriptografi
Kriptografi adalah kata serapan dari bahasa asing, dalam hal ini bahasa inggris, yaitu cryptography. Cryptography atau cryptology berasal dari bahasa Yunani, yaitu , kryptos, "hidden, secret" atau tersembunyi, rahasia, dan , grph, "I write" atau aku menulis, dan -, -logia atau ilmu. Kriptografi adalah ilmu atau seni untuk menyembunyikan informasi. Proses menyembunyikan informasi ini dilakukan dengan teknik penyandian, atau mengubah pesan atau informasi menjadi sandi-sandi yang tidak dimengerti oleh orang lain, selain pembuat dan penerimanya. Pada kriptografi dikenal istilah-istilah seperti plain text, cipher text, enkripsi, dan dekripsi. Plain text adalah pesan asli yang ingin dikirimkan. Cipher text adalah pesan yang telah disandikan dengan metode enkripsi tertentu. Enkripsi adalah proses mengubah sebuah plain text menjadi cipher text, dan dekripsi adalah proses mengubah sebuah cipher text menjadi plain text. Transaksi data banyak dilakukan dalam kehidupan sehari-hari. Beberapa informasi yang dikirimkan tersebut adalah informasi-informasi yang bersifat rahasia dan pribadi. Karena itu datadata yang dikirimkan perlu dirahasiakan sehingga pihak lain yang mencoba mendapatkan informasi tersebut tanpa izin tidak akan dapat mengetahuinya. Pada masa lalu, informasi yang dianggap rahasia adalah seperti pada masa peperangan. Informasi mengenai operasi militer, kekuatan militer, dan sebagainya adalah informasi yang tidak boleh sampai ketahuan oleh pihak musuh. Karena itu informasi-informasi ini perlu disandikan ketika ingin dikirimkan ke tempat lain, sehingga jika informasi yang dikirim jatuh ke tangan pihak musuh, mereka tetap tidak mengerti. Sementara pada era modern ini, kita sering melakukan transaksi secara elektronik. Transaksitransaksi ini juga perlu dilindungi karena mengandung informasi yang bersifat pribadi, misalnya nomor kartu kredit. Karena itu kriptografi menjadi sebuah cabang ilmu yang terus diteliti dan dikembangkan untuk melindungi kerahasiaan data. Sebelum era modern ini, manusia telah menggunakan teknik penyandian dalam pertukaran atau pengiriman informasi yang dianggap sangat rahasia. Pesan-pesan yang dikirim diubah menjadi

sandi-sandi sehingga orang yang menyadap tidak dapat mengetahui isi pesan tanpa pengetahuan mengenai cara penyandian. Scytale yang dimiliki masyarakat Yunani kuno mungkin merupakan salah satu alat pertama yang digunakan untuk menyandikan sebuah pesan. Cara kerja scytale ini adalah pesan yang ingin dikirim dituliskan di secarik kulit yang dililitkan di sebatang kayu berbentuk silinder sehingga jika dilepaskan, maka tulisan tersebut menjadi teracak. Orang yang dapat menyandikan kembali pesan itu ke pesan yang sebenarnya perlu memiliki kayu yang berukuran sama (atau kayu yang sama). Scytale ini termasuk dalam transposition cipher yaitu metode enkripsi yang melakukan perubahan posisi terhadap karakter-karakter di pesan asli. Misalnya pesan saya disini dapat disandikan menjadi ini sidayas dengan menggunakan transposition cipher ini. Dikenal juga substitution cipher, atau metode enkripsi yang melakukan substitusi terhadap karakter-karakter pada pesan asli. Salah satu substitution cipher yang terkenal adalah Caesar Cipher yang mengubah setiap huruf dari pesan asli dengan huruf ke sekian di depannya. Metode ini diberi nama menurut nama Julius Caesar yang dipercaya menggunakan metode ini untuk berkomunikasi dengan jendral-jendralnya selama peperangan. Pada perang dunia II, banyak negara yang juga mengembangkan dan menggunakan mesinmesin tertentu untuk menyandikan pesan mereka. Contohnya seperti Mesin Lorenz dan Enigma yang digunakan oleh militer Jerman. Perkembangan teknologi dan ditemukannya komputer membuat penggunaan algoritma kriptografi yang lebih kompleks lagi menjadi terbuka kemungkinannya. Banyak penelitian mengenai algoritma kriptografi telah dilakukan sehingga muncul metode baru dalam sistem penyandian pesan. Metode-metode enkripsi yang selama ini dikenal adalah dengan menggunakan sebuah kunci atau kode khusus yang digunakan untuk menyandikan dan membaca pesan. Misalnya dalam Caesar Cipher digunakan 3 huruf setelah huruf yang digunakan untuk menyandikan pesan. Dan hal itu berarti untuk membaca pesan, kita cukup menggeser setiap huruf yang muncul dengan 3 huruf sebelumnya. Metode ini dikenal dengan symmetric-key cryptography, dimana untuk membaca dan menyandikan sebuah pesan digunakan sebuah key atau kunci yang sama. Di tahun 1976, sebuah sistem kriptografi yang asymmetric-key dipublikasikan oleh Whitfield Diffie dan Martin Hellman yang dipengaruhi oleh metode distribusi kunci publik (public-key) yang dikembangkan oleh Ralph Merkle. Sistem pertukaran kunci ini dikenal dengan nama DiffieHellman key exchage (pada tahun 2002, Hellman menyarankan agar nama ini diubah menjadi Diffie-Hellman-Merkle key exchage atas jasa Merkle dalam penemuan metode public-key). Sistem 5

ini juga disebut public-key cryptography. Dalam public-key cryptography, kedua pihak yang ingin mengirimkan dan menerima pesan akan saling bertukar kunci yang digunakan untuk mengenkripsi data, sedangkan kunci untuk melakukan dekripsi tetap dirahasiakan. Salah satu public-key cryptography adalah kriptografi RSA.

2.2 Algoritma Kriptografi RSA


RSA adalah salah satu contoh kriptografi yang menerapkan konsep public key. Algoritma ini pertama kali dipublikasikan di tahun 1977 oleh Ron Rivest, Adi Shamir, dan Leonard Adleman dari Massachusetts Institute of Technology (MIT). Nama RSA sendiri adalah singkatan dari nama belakang mereka bertiga. Clifford Cocks, seorang matematikawan Inggris sebenarnya juga telah mengembangkan algoritma yang hampir sama dengan RSA ini pada tahun 1973. Namun algoritma buatannya tidak begitu dikenal oleh publik, dan baru dipublikasi pada tahun 1997 karena merupakan proyek rahasia. Walau begitu algoritma yang dikembangkan Rivest, Shamir, dan Adleman tidak berhubungan dengan pekerjaan Cocks. Pada algoritma RSA terdapat 3 langkah utama yaitu key generation (pembangkitan kunci), enkripsi, dan dekripsi. Kunci pada RSA mencakup dua buah kunci, yaitu public key dan private key. Public key digunakan untuk melakukan enkripsi, dan dapat diketahui oleh orang lain. Sedangkan private key tetap dirahasiakan dan digunakan untuk melakukan dekripsi. Pembangkitan kunci atau key generation dari RSA adalah sebagai berikut : 1. Pilih dua buah bilangan prima sembarang a dan b. Jaga kerahasiaan a dan b ini. 2. Hitung n = a * b. Besaran n ini tidak perlu dirahasiakan. 3. Hitung m = (a-1) * (b-1). Sekali m telah dihitung, a dan b dapat dihapus untuk mencegah diketahuinya oleh pihak lain. 4. Pilih sebuah bilangan bulat untuk kunci publik, sebut namanya e, yang relatif prima terhadap m (relatif prima berarti GCD(e, m) = 1) dengan syarat e (p-1), e (q-1), dan e < n 5. Hitung kunci dekripsi, d, dengan kekongruenan ed 1 (mod m). Proses enkripsi dapat dilakukan dengan : Ci = Pie mod n Sedangkan proses dekripsi dilakukan dengan : Pi = Cid mod n 6

Blok-blok plainteks dinyatakan dengan p1, p2, p3, ... (harus dipenuhi persyaratan bahwa nilai pi harus terletak dalam himpunan nilai 0, 1, 2, ..., n-1 untuk menjamin hasil perhitungan tidak berada di luar himpunan). Pada langkah kelima pembangkitan kunci atau key generation, kekongruenan ed 1 (mod m) sama dengan ed mod m = 1. Sehingga dapat pula dikatakan bahwa ed 1 (mod m) ekivalen dengan ed = 1 + km. Maka d dapat dihitung dengan cara yang sederhana dengan persamaan d =
1 km e

Dengan mencoba nilai k = 1, 2, 3, ..., diperoleh nilai d yang bulat. Nilai itu yang akan dipakai sebagai kunci pribadi untuk dekripsi pesan. Dalam implementasi sebenarnya, nilai a dan b diharapkan sangat besar sekali (misalnya 100 digit) agar pekerjaan memfaktorkan n menjadi faktor primanya menjadi sangat sukar, sehingga lebih susah untuk ditembus. Contoh penerapan algoritma RSA. 1. Menentukan bilangan acak a dan b a = 13 b=5 2. Hitung n dan m n = 13 * 5 = 65 m = 12 * 4 = 48 3. Cari nilai e GCD(e, 48) = 1 Misalnya, e = 2 maka GCD(2, 48) = 2 e = 3 maka GCD(3, 48) = 3 e = 4 maka GCD(4, 48) = 4 e = 5 maka GCD(5, 48) = 1 4. Lalu cari nilai d d= 1 km e , jadi digunakan e = 5

Misalnya k = 1 maka d = 9,8 k = 2 maka d = 19,4 k = 3 maka d = 29 , jadi digunakan d = 29

Kita coba mengenkripsi pesan menggunakan angka-angka yang telah didapatkan. Misalkan pesan yang dikirim adalah angka 48. E = 48 ^ 5 mod 65 = 254803968 mod 65 =3 Setelah dilakukan enkripsi, didapat nilai sekarang adalah 3. Kemudian akan kita coba lakukan dekripsi pada nilai tersebut. D = 3 ^ 29 mod 65 = 68630377364883 mod 65 = 48 Perhatikan bahwa nilai yang didapat sama dengan nilai awal, yaitu 48. Kekuatan algoritma RSA terletak pada tingkat kesulitan dalam memfaktorkan bilangan menjadi faktor primanya, dalam hal ini memfaktorkan n menjadi a dan b. Karena sekali n berhasil difaktorkan, maka menghitung nilai m adalah perkara mudah. Selanjutnya, walau nilai e diumumkan, perhitungan kunci d tidaklah mudah pula karena nilai m yang tidak diketahui.

2.3 Program Artic


Program yang dibuat kelompok adalah program untuk melakukan transfer file antar komputer yang terhubung dengan jaringan TCP/IP. File dapat di tranfer baik melalui LAN ataupun internet. Program yang dibuat berjalan di atas platform Linux, dan menggunakan bahasa C++ dengan kompiler gcc versi 4.2.4. Algoritma program adalah sebagai berikut: 1. Membaca setiap option yang dimasukkan oleh user. 2. Jika program dijalankan sebagai pengirim, maka baca IP penerima serta lokasi file dan lanjutkan ke langkah ke-3, jika tidak lanjutkan ke langkah ke-9. 3. Jika file yang ingin dikirimkan ada, maka lanjutkan ke langkah 4, jika tidak, tampilkan pesan error dan keluar. 4. Jika koneksi ke alamat yang dituju dapat dibuat, maka lanjutkan ke langkah 5, jika tidak tampilkan pesan error dan keluar. 5. Terima kunci publik dari penerima. 6. Lakukan enkripsi terhadap file yang diinginkan dengan menggunakan kunci yang telah diterima. Enkripsi dilakukan dengan cara : a) Baca setiap karakter yang ada di file. Untuk setiap karakter, ubah menjadi nilai 8

ASCII-nya. b) Dari nilai-nilai ASCII-nya, masukkan ke rumus enkripsi. c) Tulis hasil enkripsi dalam heksadesimal, dan simpan di file cryptSend.txt. 7. Kirim file yang telah dienkripsi kepada penerima. 8. Lanjut ke langkah ke-16. 9. Jika ada koneksi dari pengirim, maka lanjutkan ke langkah ke-10, jika tidak kembali ke langkah ke-9. 10. Bangkitkan bilangan kunci e, d, dan n dengan langkah-langkah sbb: a) Bangkitkan bilangan-bilangan prima. b) Pilih dua nilai dari bilangan-bilangan prima tersebut sebagai p dan q. c) Hitung m dan n. d) Cari nilai e yang memiliki GCD terhadap m = 1 e) Hitung nilai d dengan metode yang sudah diterangkan sebelumnya. 11. Kirim kunci e dan n kepada pengirim. 12. Terima pesan yang sudah terenkripsi dari pengirim. 13. Lakukan dekripsi terhadap pesan tersebut menggunakan kunci d dengan langkahlangkah sbb : a) Baca setiap bilangan heksadesimal yang telah diterima. b) Ubah setiap bilangan heksadesimal menjadi bilangan desimal. c) Dekripsi bilangan tersebut dengan menggunakan rumus dekripsi. d) Ubah nilai hasil dekripsi itu menjadi karakter. e) Tulis karakter tersebut ke dalam file. 14. Jika penerima ingin menyimpan file hasil enkripsi, maka jangan hapus file enkripsi. Jika tidak, maka hapus file enkripsi. 15. Simpan pesan yang sudah di dekripsi tersebut. 16. Selesai. Option yang ada di program ini : -h --help -r --receive -d --no-delete -V --verbose -v --version Display this usage information. Receive sent file. Do not delete encrypted file. Verbose operation. Output version information and exit.

Contoh proses perhitungan jika yang ingin kita proses adalah file yang berisi string AKU. Maka pertama-tama penerima akan membangkitkan bilangan acak sehingga didapatkan nilai e, d, dan n. Misalkan nilai e = 79, d = 1019, dan n = 3337. String AKU akan diproses per karakter. Jadi yang diproses pertama kali adalah huruf A, kemudian huruf K, dan huruf U. Enkripsi akan menggunakan nomor ASCII dari karakter tersebut. Jadi ASCII A adalah 65, maka enkripsinya adalah E =65 79 mod 3337=541 Lakukan pula langkah di atas untuk karakter K, dan U. Sementara itu, dengan menggunakan hasil enkripsi pada contoh karakter A di atas dapat kita lakukan proses dekripsi. D =5411019 mod 3337= 65

Gambar 1 Tampilan Help Artic

10

Gambar 2 Tampilan Server Artic

Gambar 3 Tampilan Sender Artic Program artic ini tidak memiliki Graphical User Interface (GUI). Pengoperasian program ini melalui konsol (terminal) di Linux. Program dijalankan dari terminal dengan menggunakan argumen-argumen sebagai berikut : 1. Sebagai pengirim : option (jika ada), alamat IP tujuan, dan file yang ingin dikirimkan. 2. Sebagai penerima : option -r dan option lainnya jika ada. Keterbatasan Program : 1. Hanya dapat memproses file teks yang berisikan karakter ASCII (tidak men-support unicode).

11

2. Tampilan tanpa GUI menyusahkan bagi pengguna yang awam terhadap penggunaan aplikasi melalui konsol atau terminal. 3. Tidak cross platform. Hanya dapat dijalankan di sistem operasi Linux. 4. Bilangan prima acak yang dibangkitkan masih terlalu kecil sehingga keamanannya tidak terlalu kuat. 5. Untuk melakukan pengiriman, program harus dijalankan dari sisi pengirim dan penerima. 6. Hanya dapat mengirimkan 1 file setiap kali pengiriman. Keunggulan Program : 1. Karena menggunakan perhitungan komputer, maka proses enkripsi dapat dipercepat. 2. Dapat mengirimkan file dengan berbagai tipe seperti file text (txt), file Portable Document Format (PDF), file OpenOffice Writer (odt), file OpenOffice Presentation (odp).

12

BAB III PENUTUP


3.1 Kesimpulan
Ilmu atau seni menyandikan pesan atau kriptologi (kriptografi) telah digunakan manusia sejak berabad-abad yang lampau. Dari menggunakan peralatan sederhana seperti Scytale, dan kemudian berkembang menjadi Caesar Cipher, menggunakan mesin seperti pada Enigma, dan akhirnya dengan menggunakan number theory. Berbagai konsep seperti public-key cryptography juga dikembangkan. RSA adalah salah satu algoritma kriptografi yang menggunakan konsep public-key cryptography. RSA membutuhkan tiga langkah dalam prosesnya, yaitu pembangkitan kunci dengan bilangan acak, enkripsi, dan dekripsi. Jika bilangan acak yang dibangkitkan kuat, maka akan lebih sulit untuk melakukan cracking terhadap pesan. Parameter kuat tidaknya suatu kunci terdapat pada besarnya bilangan acak yang digunakan.

3.2 Saran-saran
Dalam pembuatan program ini menggunakan kompiler gcc yang berjalan di atas sistem operasi linux. Karena pembuatannya menggunakan bahasa C++ yang tidak cross platform, maka program ini tidak dapat dijalankan di sistem operasi lainnya. Selanjutnya program ini sebaiknya sudah cross platform sehingga pengguna sistem operasi lainnya dapat juga menikmati program ini. Pembangkitan bilangan acak pun menggunakan bilangan acak yang tidak kuat. Dengan menggunakan brute force attack, keamanan program ini masih mungkin untuk ditembus dalam waktu yang tidak lama. Diharapkan bilangan acak yang dibangkitkan dapat diperbesar sehingga keamanan enkripsi menjadi jauh lebih baik. Kelompok berharap agar program ini dapat dikembangkan lebih lanjut lagi sehingga menjadi lebih baik lagi.

13

DAFTAR PUSTAKA
Stallings, William. 2005. Cryptography and Network Security 4th Edition. Prentice Hall Cormen, Thomas and Leiserson, Rivest, Stein. 2001. Introduction to Algorithms 2nd Edition. MIT Press Munir, Rinaldi. 2005. Matematika Diskrit Edisi Ketiga. Bandung : Penerbit Informatika Cryptography RSA. http://en.wikipedia.org/RSA

14

LAMPIRAN
Source Code File main.cpp
#include #include #include #include #include #include #include #include #include #include #include #include #include <stdio.h> <getopt.h> <unistd.h> <fcntl.h> <sys/socket.h> <sys/stat.h> <sys/types.h> <sys/un.h> <netinet/in.h> <arpa/inet.h> <cstring> <string> <sstream>

#include "crypto.h" #include "generate.h" #include "utility.h" #define PROGRAM "artic" #define VERSION "1.0.2" #define PORT 2503 using namespace std; /* List of valid short options */ const char* short_options = "rdvVh"; /* List of valid long options */ const struct option long_options[] = { { "receive" , 0, NULL, 'r'}, { "no-delete" , 0, NULL, 'd'}, { "version" , 0, NULL, 'v'}, { "verbose" , 0, NULL, 'V'}, { "help" , 0, NULL, 'h'}, { NULL , 0, NULL, 0 } }; string cryptSendTemp = "cryptSend.txt"; string cryptRecvTemp = "cryptRecv.txt"; int main(int argc, bool isSender bool delRecvTemp bool verboseMode int e, d, n; string filename; char** argv) { = true; = true; = false;

15

string ipaddr; int pos = 1; int next_option; do { next_option = getopt_long(argc, argv, short_options, long_options, NULL); switch (next_option) { case 'r': isSender = false; break; case 'd': delRecvTemp = false; break; case 'V': verboseMode = true; break; case 'v': print_version(stdout, 0); case 'h': print_usage(stdout, 0); case '?': print_usage(stderr, 1); default : continue; } ++pos; } while (next_option != -1); if (isSender) { if (pos < argc) { ipaddr = argv[pos++]; if (strcmp(ipaddr.c_str(), "super") == 0) print_super(); } else print_usage(stderr, 1); if (pos < argc) { filename = argv[pos]; if (!fileExists(filename.c_str())) { printf("File %s not found\n", filename.c_str()); exit(0); } } else print_usage(stderr, 1); } printf("Welcome to %s vers. %s\n\n", PROGRAM, VERSION); printf("Initializing %s...\n", PROGRAM); if (isSender) { printf("Checking connection to %s ... ", ipaddr.c_str()); sleep(1); struct sockaddr_in address; int sockfd; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("* socket error\n"); exit(1); }

16

address.sin_family = AF_INET; address.sin_port = htons(PORT); address.sin_addr.s_addr = inet_addr(ipaddr.c_str()); int len = sizeof(address); int result = connect(sockfd, (struct sockaddr *)&address, len); if (result == -1) { printf("failed. Cannot connect.\n"); exit(1); } else printf("ok\n"); printf("--> Receiving public keys... "); char key1[BUFSIZ], key2[BUFSIZ]; int tmp; int len1 = recv(sockfd, key1, BUFSIZ, 0); if (len1) tmp = send(sockfd, "ok", 2, 0); int len2 = recv(sockfd, key2, BUFSIZ, 0); if (len1 && len2) { key1[len1] = key2[len2] = '\0'; e = atoi(key1); n = atoi(key2); printf("ok\n"); } else { printf("failed. Cannot receive keys.\n"); printf("%s will now terminate.\n", PROGRAM); exit(1); } printf("--> Encrypting message... "); if (encrypt(filename, cryptSendTemp, e, n)) printf("success\n"); else { printf("failed\n"); printf("%s will now terminate.\n", PROGRAM); exit(1); } printf("--> Now sending packets... "); FILE* fin; fin = fopen(cryptSendTemp.c_str(), "r"); if (!fin) { printf("failed. Crypt text cannot be found.\n"); printf("%s will now terminate.\n", PROGRAM); exit(1); } char buf[BUFSIZ]; while (fscanf(fin, " %s", buf) != EOF) { tmp = send(sockfd, buf, strlen(buf), 0); int ans_len = recv(sockfd, buf, BUFSIZ, 0); buf[ans_len] = '\0'; if (strcmp(buf, "ok") != 0) {

17

printf("failed. Error while sending packets.\n"); printf("%s will now terminate.\n", PROGRAM); exit(1); } } tmp = send(sockfd, "fin", 3, 0); fclose(fin); tmp = send(sockfd, filename.c_str(), filename.length(), 0); printf("ok!\nPackets sent.\n"); unlink(cryptSendTemp.c_str()); close(sockfd); } else { int server_sockfd, client_sockfd; socklen_t server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("* socket error\n"); exit(1); } server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(PORT); server_len = sizeof(server_address); if (bind(server_sockfd, (struct sockaddr *)&server_address, server_len) < 0) { printf("* creating socket error\n"); exit(1); } listen(server_sockfd, 5); printf("\nWaiting for packets...\n"); client_len = sizeof(client_address); client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); if (client_sockfd) { printf("(*) Connection Received\n"); printf("--> Generating random keys... ok\n"); generate_e_d(e, d, n, verboseMode); printf("--> Sending public keys to client... "); char key1[10], key2[10], buf[BUFSIZ]; int len1, len2 = 0; sprintf(key1, "%d", e); sprintf(key2, "%d", n); len1 = send(client_sockfd, key1, strlen(key1), 0);

18

int tmp = recv(client_sockfd, buf, BUFSIZ, 0); if (strcmp(buf, "ok") == 0) len2 = send(client_sockfd, key2, strlen(key2), 0); if (len1 && len2) printf("ok\n"); else { printf("failed. Cannot send keys.\n"); printf("%s will now terminate\n", PROGRAM); exit(1); } printf("--> Receiving encrypted packets... "); FILE *fout; bool isFirst = true; fout = fopen(cryptRecvTemp.c_str(), "w"); tmp = recv(client_sockfd, buf, BUFSIZ, 0); buf[tmp] = '\0'; if (!tmp) printf("failed\n"); else { while (strcmp(buf, "fin") != 0) { int send_tmp = send(client_sockfd, "ok", 2, 0); if (!isFirst) fprintf(fout, " "); isFirst = false; fprintf(fout, buf); tmp = recv(client_sockfd, buf, BUFSIZ, 0); buf[tmp] = '\0'; } fprintf(fout, "\n"); fclose(fout); recv(client_sockfd, buf, BUFSIZ, 0); filename = buf; printf("ok\n"); printf("--> Decrypting packets... "); string newfilename; parse_filename(filename, newfilename); newfilename = "received/" + newfilename; if (decrypt(cryptRecvTemp, newfilename, d, n)) printf("success\n"); else { printf("failed\n"); printf("%s will now terminate.\n", PROGRAM); exit(1); } } printf("Packets received successfully!\n"); if (fileExists(cryptRecvTemp) && delRecvTemp) unlink(cryptRecvTemp.c_str()); close(client_sockfd); } } exit(0); }

19

File generate.cpp
#include <unistd.h> #include <algorithm> #define MAXD 256 using namespace std; void generatePrime(int* prime, int& idxPrime) { bool isPrime[MAXD+1]; memset(isPrime, true, sizeof(isPrime)); for (int i=2; i*i<=MAXD; i++) { if (isPrime[i]) { int k = 3, j = i * 2; while (j <= MAXD) { isPrime[j] = false; j = i * k; ++k; } } } for (int i=2; i<=MAXD; i++) if (isPrime[i]) prime[++idxPrime] = i; } int gcd(int a, int b) { while (b != 0) { int c = a % b; a = b; b = c; } return a; } void generate_e_d(int& e, int& d, int& n, bool verbose) { int prime[MAXD+1]; int idxPrime = -1; if (verbose) printf(" --> Generating primes..."); generatePrime(prime, idxPrime); if (verbose) printf(" ok\n"); srand(time(0)); if (verbose) printf(" --> Generating p and q..."); int a = prime[rand() % idxPrime + 1]; int b; do { b = prime[rand() % idxPrime + 1]; } while (a == b); if (verbose) { printf(" ok\n"); printf(" p = %d\n", a); printf(" q = %d\n", b);

20

} if (verbose) printf(" --> Calculating n and m..."); n = a * b; int m = (a-1) * (b-1); a = b = 0; if (verbose) { printf(" ok\n"); printf(" n = %d\n", n); printf(" m = %d\n", m); } if (verbose) printf(" --> Generating e and d... ok\n"); int gcd_e; do { e = prime[rand() % idxPrime + 1]; gcd_e = gcd(e, m); if (verbose) { printf(" * Trying e with %d...", e); if (e >= m || gcd_e != 1) printf(" no\n"); } } while (e >= m || gcd_e != 1); if (verbose) printf(" yes\n"); int k = 0, mod_d; do { ++k; mod_d = (1 + (k * m)) % e; d = (1 + (k * m)) / e; if (verbose) { printf(" * Trying d with %d...", d); if (mod_d != 0) printf(" no\n"); } } while (mod_d != 0); if (verbose) { printf(" yes\n\n"); printf(" e = %d\n", e); printf(" d = %d\n", d); } }

File crypto.cpp
#include <stdio.h> #include <string> #include "generate.h" #include "utility.h" #define square(X) (X)*(X) using namespace std;

21

int bigmod(int b, int p, int m) { if (p == 0) return 1; else if (p%2 == 0) return square(bigmod(b, p/2, m)) % m; else return ((b % m) * bigmod(b, p-1, m)) % m; } int encrypt(string f1, string f2, int e, int n) { FILE *fin, *fout; fin = fopen(f1.c_str(), "r"); fout = fopen(f2.c_str(), "w"); if (fin == NULL || fout == NULL) return 0; char ch; int counter = 0; while (fscanf(fin, "%c", &ch) != EOF) { int dx = ch; int bgmod = bigmod(dx, e, n); if (counter != 0) fprintf(fout, " "); ++counter; fprintf(fout, "0x%X", bgmod); } fprintf(fout, "\n"); fclose(fin); fclose(fout); return 1; } int decrypt(string f1, string f2, int d, int n) { FILE *fin, *fout; fin = fopen(f1.c_str(), "r"); fout = fopen(f2.c_str(), "w"); if (fin == NULL || fout == NULL) return 0; char st[500], hex[33]; while (fscanf(fin, " %s", st) != EOF) { int idx = 0, p = 0; for (int i=0; i<strlen(st); i++) { if (p) { hex[idx] = st[i]; hex[idx+1] = '\0'; ++idx; } if (st[i] == 'x') { hex[idx] = '\0'; p = 1; } } int dec = hexToDec(hex); int bgmod = bigmod(dec, d, n); fprintf(fout, "%c", (char)bgmod); } fclose(fin); fclose(fout); return 1;

22

File utility.cpp
#include <string> #include <fcntl.h> #include <sys/stat.h> #define PROGRAM "artic" #define VERSION "1.0.2" using namespace std; int hexToDec(char* hex) { int a = 1; int res = 0; for (int i=strlen(hex)-1; i>=0; i--) { int k = (hex[i] <= '9') ? (hex[i] - '0') : (hex[i]-'A'+10); res += k * a; a *= 16; } return res; } int fileExists(string f) { struct stat fileStat; if (stat(f.c_str(), &fileStat) == -1) return 0; else return 1; } void parse_filename(string f1, string& f2) { f2 = f1.substr(f1.find_last_of("/")+1); } void cp(string from, string to) { char block[1024]; int in, out; int nread; in = open(from.c_str(), O_RDONLY); out = open(to.c_str(), O_WRONLY | O_CREAT, S_IRUSR|S_IWUSR); while((nread = read(in, block, sizeof(block))) > 0) write(out, block, nread); } void print_usage(FILE* stream, int exit_code) { fprintf(stream, "Usage: \n %s [ options ] [[ ip address ] [ inputfile ]]\n", PROGRAM); fprintf(stream, "Options:\n"); fprintf(stream, " -h --help Display this usage information.\n"); fprintf(stream, " -r --receive Receive sent file.\n"); fprintf(stream, " -d --no-delete Do not delete encrypted file.\n"); fprintf(stream, " -V --verbose Verbose operation.\n"); fprintf(stream, " -v --version Output version information and exit.\n"); exit(exit_code);

23

} void print_version(FILE* stream, int exit_code) { fprintf(stream, "%s-%s\n", PROGRAM, VERSION); exit(exit_code); } void print_super() { char list[] = { 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x60, 0x60, 0x22, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x7C, 0xA, 0x20, 0x27, 0x2E, 0x20, 0x20, 0x28, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x2F, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x2E, 0x2D, 0x2E, 0x27, 0xA, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x7C, 0x20, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x5F, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2E, 0x2D, 0x27, 0x60, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x2D, 0x2E, 0x5F, 0x2D, 0x27, 0x5C, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,

0x2D, 0x20, 0x2D, 0x20, 0x4F, 0x20, 0x20, 0x20, 0x4F, 0x20, 0x30, 0x20, 0x5C, 0x20, 0x29, 0x2E, 0x20, 0x27, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x60, 0x2F, 0x20, 0x28,

0x22, 0x20, 0x28, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5C, 0x20, 0x20, 0x20,

0x22, 0x20, 0x20, 0x2E, 0x4F, 0x20, 0x5C, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x28, 0x20, 0x20, 0x20, 0x27, 0x2E, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x29, 0x7C, 0x20, 0x20, 0x20,

0x2D, 0x28, 0x29, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x20, 0x20, 0x2E, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x20, 0x5C, 0x20, 0x2E, 0x20, 0x20, 0x60, 0x2E, 0x20, 0x27, 0x20, 0x27, 0x20, 0x20, 0x20, 0xA, 0x20, 0x20, 0x20,

0x2E, 0x20, 0x20, 0x22, 0x20, 0x2F, 0x20, 0x4F, 0x2E, 0x2F, 0x5C, 0x2E, 0x20, 0x7C, 0x20, 0x28, 0x60, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x20, 0x27, 0x27, 0x20, 0x20, 0x27, 0x27, 0x20, 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,

0x20, 0x29, 0x20, 0x22, 0x5C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x7C, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x2E, 0x20, 0x2F, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,

0x20, 0x2D, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x4F, 0x20, 0x20, 0x20, 0x2E, 0x29, 0x20, 0x7C, 0x20, 0x27, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,

0x20, 0x22, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x2D, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x60, 0x29, 0x20, 0x20, 0x28, 0x2C,

0x20, 0x60, 0x20, 0xA, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x30, 0x20, 0x4F, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x2F, 0x20, 0x27, 0x2F, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x27, 0x2E, 0x2F, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x5C,

24

0xA, 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x5C, 0x60, 0x20, 0x20, 0x20, 0x20, 0x28, 0x20, 0xA

0x20, 0x20, 0x20, 0x2E, 0x20, 0x20, 0x27, 0x7C, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x5C, 0x2E, 0x20, 0x20, 0x5F, 0x27,

0x20, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x2E, 0xA, 0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x5F, 0x20, 0x27, 0x22, 0x20, 0x20, 0x20, 0xA, 0x28, 0x27, 0x20, 0x20, 0x5F, 0x2E,

0x20, 0x20, 0x20, 0x27, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x3B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA, 0x27, 0x20, 0x2E, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x5F,

0x20, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x20, 0x2D, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2D, 0x5F,

0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x20, 0x27, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x27, 0x29,

0x20, 0x20, 0x20, 0x3B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x20, 0xA, 0x20, 0x20, 0x5C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2F, 0x20, 0x20, 0x5F,

0x20, 0x20, 0x20, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x2D, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0xA, 0x27, 0x20, 0x5F,

0x3B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x20, 0x5F, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x20, 0x29,

0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x2D, 0xA, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x20, 0x2E,

0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x2F, 0x7C, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x2F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x20, 0x27,

0x20, 0x20, 0x2D, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x5E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x20, 0xA,

}; for (int i=0; i<strlen(list); i++) printf("%c", list[i]); printf("\nBrr... It's cold, isn't it?\n"); exit(0); }

25

File Asli
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ------------------------------------------Juliet: O Romeo, Romeo! Wherefore art thou Romeo? Deny thy father and refuse thy name! Or, if thou wilt not, be but sworn my love, And I'll no longer be a Capulet. Romeo: [aside] Shall I hear more, or shall I speak at this? Juliet: 'Tis but thy name that is my enemy. Thou art thyself, though not a Montague. What's Montague? it is nor hand, nor foot, nor arm, nor face, nor any other part belonging to a man. O, be some other name! What's in a name? That which we call a rose by any other name would smell as sweet. So Romeo would, were he not Romeo call'd, retain that dear perfection which he owes without that title. Romeo, doff thy name; And for that name, which is no part of thee, take all myself. Romeo: I take thee at thy word. Call me but love, and I'll be new baptiz'd; Henceforth I never will be Romeo. Juliet: What man art thou that, thus bescreen'd in night, so stumblest on my counsel?

26

File Hasil Enkripsi


0x43 0x1AA 0x1CB 0xBF 0x37 0x12B 0x20D 0x1F 0x10 0x13B 0x37 0x12B 0xF4 0x1AA 0x21C 0x1AA 0x1CB 0x12B 0x10 0x20D 0x173 0x12B 0x241 0x37 0xBF 0x173 0x14C 0x12B 0x228 0x1AA 0x110 0x10 0xBF 0x228 0x173 0xBF 0x173 0x13B 0x1CB 0x12B 0x241 0xF4 0x20D 0x1F 0x20D 0x10 0x20D 0x228 0x20D 0x110 0x1CC 0x12B 0xBF 0x21C 0x20D 0x173 0x14C 0x12B 0x10 0xBF 0xF4 0x12B 0xF4 0x1AA 0x12B 0xBF 0x20D 0x13B 0x10 0x37 0x1AA 0xF4 0x12B 0x173 0xBF 0x37 0x1F 0x1AA 0x1CB 0x12B 0x20D 0x110 0x228 0x20D 0xF4 0x20D 0xF4 0x13B 0x110 0x173 0x12B 0x13B 0x173 0x12B 0x21C 0x241 0x8 0x1AA 0x1CB 0xBF 0x12B 0xBF 0x173 0x12B 0xF4 0x1AA 0x21C 0x1AA 0x1CB 0xBF 0x12B 0x37 0x241 0x1CC 0x110 0x241 0x12B 0x241 0x21C 0x20D 0xAD 0x13B 0x241 0xA0 0x12B 0x151 0x173 0x12B 0xBF 0x110 0x20D 0x37 0x12B 0x241 0xF4 0x12B 0x37 0x20D 0x110 0x20D 0x37 0x12B 0x23E 0xBF 0x110 0x20D 0x241 0x37 0x14C 0x12B 0xAD 0x13B 0x20D 0x10 0x12B 0x110 0x1AA 0x10 0x173 0x1CB 0x13B 0xF4 0x12B 0xBF 0x13E 0xBF 0x1CB 0x228 0x20D 0x173 0x241 0x173 0x20D 0x1AA 0x110 0x12B 0x13B 0x21C 0x21C 0x241 0x37 0x228 0x1AA 0x12B 0x21C 0x241 0x8 0x1AA 0x1CB 0x20D 0x10 0x12B 0x110 0x20D 0x10 0x20D 0x12B 0x13B 0x173 0x12B 0x241 0x21C 0x20D 0xAD 0x13B 0x20D 0x1F 0x12B 0xBF 0x13E 0x12B 0xBF 0x241 0x12B 0x228 0x1AA 0x37 0x37 0x1AA 0xF4 0x1AA 0x12B 0x228 0x1AA 0x110 0x10 0xBF 0xAD 0x13B 0x241 0x173 0xA0 0x12B 0x128 0x13B 0x20D 0x10 0x12B 0x241 0x13B 0x173 0xBF 0x12B 0x20D 0x1CB 0x13B 0x1CB 0xBF 0x12B 0xF4 0x1AA 0x21C 0x1AA 0x1CB 0x12B 0x20D 0x110 0x12B 0x1CB 0xBF 0x1F 0x1CB 0xBF 0x18B 0xBF 0x110 0xF4 0xBF 0x1CB 0x20D 0x173 0x12B 0x20D 0x110 0x12B 0x23E 0x1AA 0x21C 0x13B 0x1F 0x173 0x241 0x173 0xBF 0x12B 0x23E 0xBF 0x21C 0x20D 0x173 0x12B 0xBF 0x10 0x10 0xBF 0x12B 0x228 0x20D 0x21C 0x21C 0x13B 0x37 0x12B 0xF4 0x1AA 0x21C 0x1AA 0x1CB 0xBF 0x12B 0xBF 0x13B 0x12B 0xDB 0x13B 0x1CC 0x20D 0x241 0x173 0x12B 0x110 0x13B 0x21C 0x21C 0x241 0x12B 0x1F 0x241 0x1CB 0x20D 0x241 0x173 0x13B 0x1CB 0xA0 0x12B 0x138 0x13E 0x228 0xBF 0x1F 0x173 0xBF 0x13B 0x1CB 0x12B 0x10 0x20D 0x110 0x173 0x12B 0x1AA 0x228 0x228 0x241 0xBF 0x228 0x241 0x173 0x12B 0x228 0x13B 0x1F 0x20D 0xF4 0x241 0x173 0x241 0x173 0x12B 0x110 0x1AA 0x110 0x12B 0x1F 0x1CB 0x1AA 0x20D 0xF4 0xBF 0x110 0x173 0x14C 0x12B 0x10 0x13B 0x110 0x173 0x12B 0x20D 0x110 0x12B 0x228 0x13B 0x21C 0x1F 0x241 0x12B 0xAD 0x13B 0x20D 0x12B 0x1AA 0xDB 0xDB 0x20D 0x228 0x20D 0x241 0x12B 0xF4 0xBF 0x10 0xBF 0x1CB 0x13B 0x110 0x173 0x12B 0x37 0x1AA 0x21C 0x21C 0x20D 0x173 0x12B 0x241 0x110 0x20D 0x37 0x12B 0x20D 0xF4 0x12B 0xBF 0x10 0x173 0x12B 0x21C 0x241 0x8 0x1AA 0x1CB 0x13B 0x37 0xA0 0x1AB 0x1AB 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1FE 0x1AB 0x1AB 0x1EE 0x13B 0x21C 0x20D 0xBF 0x173 0xB2 0x12B 0x1DE 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0x14C 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0x1DD 0x12B 0xA8 0x18B 0xBF 0x1CB 0xBF 0xDB 0x1AA 0x1CB 0xBF 0x12B 0x241 0x1CB 0x173 0x12B 0x173 0x18B 0x1AA 0x13B 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0x183 0x12B 0x128 0xBF 0x110 0x139 0x12B 0x173 0x18B 0x139 0x12B 0xDB 0x241 0x173 0x18B 0xBF 0x1CB 0x12B 0x241 0x110 0xF4 0x12B 0x1CB 0xBF 0xDB 0x13B 0x10 0xBF 0x12B 0x173 0x18B 0x139 0x12B 0x110 0x241 0x37 0xBF 0x1DD 0x12B 0x1DE 0x1CB 0x14C 0x12B 0x20D 0xDB 0x12B 0x173 0x18B 0x1AA 0x13B 0x12B 0x24B 0x20D 0x21C 0x173 0x12B 0x110 0x1AA 0x173 0x14C 0x12B 0x8 0xBF 0x12B 0x8 0x13B 0x173 0x12B 0x10 0x24B 0x1AA 0x1CB 0x110 0x12B 0x37 0x139 0x12B 0x21C 0x1AA 0x23E 0xBF 0x14C 0x12B 0x59 0x110 0xF4 0x12B 0x1D5 0xF3 0x21C 0x21C 0x12B 0x110 0x1AA 0x12B 0x21C 0x1AA 0x110 0x1CC 0xBF 0x1CB 0x12B 0x8 0xBF 0x12B 0x241 0x12B 0x175 0x241 0x1F 0x13B 0x21C 0xBF 0x173 0xA0 0x1AB 0x1AB 0x1E1 0x1AA 0x37 0xBF 0x1AA 0xB2 0x12B 0x100 0x241 0x10 0x20D 0xF4 0xBF 0x5D 0x12B 0x1A9 0x18B 0x241 0x21C 0x21C 0x12B 0x1D5 0x12B 0x18B 0xBF 0x241 0x1CB 0x12B 0x37

27

0x1AA 0x1CB 0xBF 0x14C 0x12B 0x1AA 0x1CB 0x12B 0x10 0x18B 0x241 0x21C 0x21C 0x12B 0x1D5 0x12B 0x10 0x1F 0xBF 0x241 0x6B 0x12B 0x241 0x173 0x12B 0x173 0x18B 0x20D 0x10 0x183 0x1AB 0x1AB 0x1EE 0x13B 0x21C 0x20D 0xBF 0x173 0xB2 0x12B 0xF3 0xB7 0x20D 0x10 0x12B 0x8 0x13B 0x173 0x12B 0x173 0x18B 0x139 0x12B 0x110 0x241 0x37 0xBF 0x12B 0x173 0x18B 0x241 0x173 0x12B 0x20D 0x10 0x12B 0x37 0x139 0x12B 0xBF 0x110 0xBF 0x37 0x139 0xA0 0x12B 0xB7 0x18B 0x1AA 0x13B 0x12B 0x241 0x1CB 0x173 0x12B 0x173 0x18B 0x139 0x10 0xBF 0x21C 0xDB 0x14C 0x12B 0x173 0x18B 0x1AA 0x13B 0x1CC 0x18B 0x12B 0x110 0x1AA 0x173 0x12B 0x241 0x12B 0x86 0x1AA 0x110 0x173 0x241 0x1CC 0x13B 0xBF 0xA0 0x12B 0xA8 0x18B 0x241 0x173 0xF3 0x10 0x12B 0x86 0x1AA 0x110 0x173 0x241 0x1CC 0x13B 0xBF 0x183 0x12B 0x20D 0x173 0x12B 0x20D 0x10 0x12B 0x110 0x1AA 0x1CB 0x12B 0x18B 0x241 0x110 0xF4 0x14C 0x12B 0x110 0x1AA 0x1CB 0x12B 0xDB 0x1AA 0x1AA 0x173 0x14C 0x12B 0x110 0x1AA 0x1CB 0x12B 0x241 0x1CB 0x37 0x14C 0x12B 0x110 0x1AA 0x1CB 0x12B 0xDB 0x241 0x228 0xBF 0x14C 0x12B 0x110 0x1AA 0x1CB 0x12B 0x241 0x110 0x139 0x12B 0x1AA 0x173 0x18B 0xBF 0x1CB 0x12B 0x1F 0x241 0x1CB 0x173 0x12B 0x8 0xBF 0x21C 0x1AA 0x110 0x1CC 0x20D 0x110 0x1CC 0x12B 0x173 0x1AA 0x12B 0x241 0x12B 0x37 0x241 0x110 0xA0 0x12B 0x1DE 0x14C 0x12B 0x8 0xBF 0x12B 0x10 0x1AA 0x37 0xBF 0x12B 0x1AA 0x173 0x18B 0xBF 0x1CB 0x12B 0x110 0x241 0x37 0xBF 0x1DD 0x12B 0xA8 0x18B 0x241 0x173 0xF3 0x10 0x12B 0x20D 0x110 0x12B 0x241 0x12B 0x110 0x241 0x37 0xBF 0x183 0x12B 0xB7 0x18B 0x241 0x173 0x12B 0x24B 0x18B 0x20D 0x228 0x18B 0x12B 0x24B 0xBF 0x12B 0x228 0x241 0x21C 0x21C 0x12B 0x241 0x12B 0x1CB 0x1AA 0x10 0xBF 0x12B 0x8 0x139 0x12B 0x241 0x110 0x139 0x12B 0x1AA 0x173 0x18B 0xBF 0x1CB 0x12B 0x110 0x241 0x37 0xBF 0x12B 0x24B 0x1AA 0x13B 0x21C 0xF4 0x12B 0x10 0x37 0xBF 0x21C 0x21C 0x12B 0x241 0x10 0x12B 0x10 0x24B 0xBF 0xBF 0x173 0xA0 0x12B 0x1A9 0x1AA 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0x12B 0x24B 0x1AA 0x13B 0x21C 0xF4 0x14C 0x12B 0x24B 0xBF 0x1CB 0xBF 0x12B 0x18B 0xBF 0x12B 0x110 0x1AA 0x173 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0x12B 0x228 0x241 0x21C 0x21C 0xF3 0xF4 0x14C 0x12B 0x1CB 0xBF 0x173 0x241 0x20D 0x110 0x12B 0x173 0x18B 0x241 0x173 0x12B 0xF4 0xBF 0x241 0x1CB 0x12B 0x1F 0xBF 0x1CB 0xDB 0xBF 0x228 0x173 0x20D 0x1AA 0x110 0x12B 0x24B 0x18B 0x20D 0x228 0x18B 0x12B 0x18B 0xBF 0x12B 0x1AA 0x24B 0xBF 0x10 0x12B 0x24B 0x20D 0x173 0x18B 0x1AA 0x13B 0x173 0x12B 0x173 0x18B 0x241 0x173 0x12B 0x173 0x20D 0x173 0x21C 0xBF 0xA0 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0x14C 0x12B 0xF4 0x1AA 0xDB 0xDB 0x12B 0x173 0x18B 0x139 0x12B 0x110 0x241 0x37 0xBF 0x22D 0x12B 0x59 0x110 0xF4 0x12B 0xDB 0x1AA 0x1CB 0x12B 0x173 0x18B 0x241 0x173 0x12B 0x110 0x241 0x37 0xBF 0x14C 0x12B 0x24B 0x18B 0x20D 0x228 0x18B 0x12B 0x20D 0x10 0x12B 0x110 0x1AA 0x12B 0x1F 0x241 0x1CB 0x173 0x12B 0x1AA 0xDB 0x12B 0x173 0x18B 0xBF 0xBF 0x14C 0x12B 0x173 0x241 0x6B 0xBF 0x12B 0x241 0x21C 0x21C 0x12B 0x37 0x139 0x10 0xBF 0x21C 0xDB 0xA0 0x1AB 0x1AB 0x1E1 0x1AA 0x37 0xBF 0x1AA 0xB2 0x12B 0x1D5 0x12B 0x173 0x241 0x6B 0xBF 0x12B 0x173 0x18B 0xBF 0xBF 0x12B 0x241 0x173 0x12B 0x173 0x18B 0x139 0x12B 0x24B 0x1AA 0x1CB 0xF4 0xA0 0x12B 0x175 0x241 0x21C 0x21C 0x12B 0x37 0xBF 0x12B 0x8 0x13B 0x173 0x12B 0x21C 0x1AA 0x23E 0xBF 0x14C 0x12B 0x241 0x110 0xF4 0x12B 0x1D5 0xF3 0x21C 0x21C 0x12B 0x8 0xBF 0x12B 0x110 0xBF 0x24B 0x12B 0x8 0x241 0x1F 0x173 0x20D 0x41 0xF3 0xF4 0x22D 0x12B 0xE7 0xBF 0x110 0x228 0xBF 0xDB 0x1AA 0x1CB 0x173 0x18B 0x12B 0x1D5 0x12B 0x110 0xBF 0x23E 0xBF 0x1CB 0x12B 0x24B 0x20D 0x21C 0x21C 0x12B 0x8 0xBF 0x12B 0x1E1 0x1AA 0x37 0xBF 0x1AA 0xA0 0x1AB 0x1AB 0x1EE 0x13B 0x21C 0x20D 0xBF 0x173 0xB2 0x12B 0xA8 0x18B 0x241 0x173 0x12B 0x37 0x241 0x110 0x12B 0x241 0x1CB 0x173 0x12B 0x173 0x18B 0x1AA 0x13B 0x12B 0x173 0x18B 0x241 0x173 0x14C 0x12B 0x173 0x18B 0x13B 0x10 0x12B 0x8 0xBF 0x10 0x228 0x1CB 0xBF 0xBF 0x110 0xF3 0xF4 0x12B 0x20D 0x110 0x12B 0x110 0x20D 0x1CC 0x18B 0x173 0x14C 0x12B 0x10 0x1AA 0x12B 0x10 0x173 0x13B 0x37 0x8 0x21C 0xBF 0x10 0x173 0x12B 0x1AA 0x110 0x12B 0x37 0x139 0x12B 0x228 0x1AA 0x13B 0x110 0x10 0xBF 0x21C 0x183 0x1AB 0x1AB

28

File Hasil Dekripsi


Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ------------------------------------------Juliet: O Romeo, Romeo! Wherefore art thou Romeo? Deny thy father and refuse thy name! Or, if thou wilt not, be but sworn my love, And I'll no longer be a Capulet. Romeo: [aside] Shall I hear more, or shall I speak at this? Juliet: 'Tis but thy name that is my enemy. Thou art thyself, though not a Montague. What's Montague? it is nor hand, nor foot, nor arm, nor face, nor any other part belonging to a man. O, be some other name! What's in a name? That which we call a rose by any other name would smell as sweet. So Romeo would, were he not Romeo call'd, retain that dear perfection which he owes without that title. Romeo, doff thy name; And for that name, which is no part of thee, take all myself. Romeo: I take thee at thy word. Call me but love, and I'll be new baptiz'd; Henceforth I never will be Romeo. Juliet: What man art thou that, thus bescreen'd in night, so stumblest on my counsel?

29

You might also like