implementasi algoritma knapsack dan base64 pada …
TRANSCRIPT
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
552
IMPLEMENTASI ALGORITMA KNAPSACK DAN BASE64 PADA
PENGAMANAN FILE TEKS
Wina Mariana Br Purba
Prodi Teknik Informatika STMIK Budi Darma, Medan, Indonesia
Jl. Sisingamangaraja No. 338 Simpang Limun, Medan
ABSTRAK
Keamanan dan kerahasiaan pesan merupakan aspek penting yang dibutuhkan dalam proses pertukaran pesan. Sehingga untuk mengatasi masalah tersebut maka terciptalah ilmu kriptografi. Kriptografi merupakan ilmu sekaligus seni untuk menjaga
kerahasiaan pesan dengan cara menyamarkannya menjadi bentuk tersandi yang tidak mempunyai makna. Contoh dari algoritma
kriptografi diantaranya adalah algoritma Knapsack dan Base64. Secara umum pesan/data dikategorikan menjadi dua. Pesan
yang bersifat rahasia dan pesan yang tidak bersifat rahasia. Pesan yang tidak bersifat rahasia biasanya tidak akan terlalu diperhatikan. Yang sangat perlu diperhatikan adalah Pesan yang bersifat rahasia, dimana setiap informasi yang ada didalamnya
akan sangat berharga bagi pihak yang membutuhkan karena data tersebut dapat dengan mudah digandakan. Untuk mendapatkan
informasi didalamnya, biasanya dilakukan berbagai cara yang tidak sah. Salah satu hal penting dalam menjaga kerahasiaan dan
keamanan file teks adalah dengan proses enkripsi. Enkripsi adalah sebuah proses yang melakukan perubahan sebuah kode dari yang dapat dimengerti menjadi sebuah kode yang tidak dapat dimengerti atau tidak terbaca. Dengan menggunakan kombinasi
algoritma kriptografi, dimana pesan akan disandikan menggunakan algoritma Knapsack, lalu hasilnya (cipherteks) akan
disandikan lagi menggunakan algoritma Base64, diharapkan dapat memperkuat keamanan dari pesan rahasia, sehingga akan
lebih sulit untuk dipecahkan. Jenis file yang akan di uji cobakan adalah file teks (.txt) pada Notepad. Notepad ini memiliki tampilan yang simple, apa adanya dan fitur yang ada memang yang paling sering digunakan, mudah, cepat, dan segudang
kepraktisan lainnya yang tidak didapatkan pada microsoft word.
Kata Kunci : Kriptografi, knapsack, base64, plainteks, cipherteks.
I. PENDAHULUAN
Keamanan merupakan salah satu aspek
terpenting dari sebuah sistem informasi. Masalah
keamanan sering kurang mendapatkan perhatian dari
para perancang dan pengelola sistem informasi.
Masalah keamanan sering berada diurutan setelah
tampilan, atau bahkan diurutan terakhir dalam daftar
hal-hal yang dianggap penting. Secara umum
pesan/data dikategorikan menjadi dua. Pesan yang
bersifat rahasia dan pesan yang tidak bersifat rahasia.
Pesan yang tidak bersifat rahasia biasanya tidak akan
terlalu diperhatikan. Yang sangat perlu diperhatikan
adalah Pesan yang bersifat rahasia, dimana setiap
informasi yang ada didalamnya akan sangat berharga
bagi pihak yang membutuhkan karena data tersebut
dapat dengan mudah digandakan. Untuk mendapatkan
informasi didalamnya, biasanya dilakukan berbagai
cara yang tidak sah. Salah satu hal penting dalam
menjaga kerahasiaan dan keamanan file teks adalah
dengan proses enkripsi. Enkripsi adalah sebuah proses
yang melakukan perubahan sebuah kode dari yang
dapat dimengerti menjadi sebuah kode yang tidak dapat
dimengerti atau tidak terbaca. Enkripsi dapat diartikan
sebagai kode atau chiper. Sebuah chiper menggunakan
suatu algoritma yang dapat mengkodekan semua aliran
data (stream) bit dari sebuah pesan menjadi cryptogram
yang tidak dapat dimengerti (unintelligible), dan untuk
memperoleh kembali informasi yang asli dilakukan
proses dekripsi dengan menggunakan kunci yang
benar.
Dengan menggunakan kombinasi algoritma
kriptografi, dimana pesan akan disandikan
menggunakan algoritma Knapsack, lalu hasilnya
(cipherteks) akan disandikan lagi menggunakan
algoritma Base64, diharapkan dapat memperkuat
keamanan dari pesan rahasia, sehingga akan lebih sulit
untuk dipecahkan. Jenis file yang akan di uji cobakan
adalah file teks (.txt) pada Notepad. Notepad ini
memiliki tampilan yang simple, apa adanya dan fitur
yang ada memang yang paling sering digunakan,
mudah, cepat, dan segudang kepraktisan lainnya yang
tidak didapatkan pada microsoft word. Selain itu jika
tidak menggunakan komputer pribadi, notepad ini
sering digunakan untuk menyimpan catatan singkat
seperti password, kode-kode HTML dll.
Knapsack merupakan algoritma kriptografi
asimetris yang menggunakan kunci publik untuk
mengenkripsi pesan dan menggunakan kunci pribadi
untuk mendeskripsikan pesan. Keamanan algoritma
ini terletak pada sulitnya memecahkan persoalan
knapsack (Knapsack Problem) karena, dengan kunci
publik orang dapat mengenkripsi pesan tetapi tidak bisa
mendekripsinya. Hanya orang yang memiliki kunci
rahasia yang dapat mendekripsi pesan tersebut.
Base64 merupakan salah satu algoritma untuk
Encoding dan Decoding suatu data ke dalam format
ASCII, yang didasarkan pada bilangan dasar 64 atau
bisa dikatakan sebagai salah satu metode yang
digunakan untuk melakukan encoding (penyandian)
terhadap data binary .
II. TEORITIS
A. Kriptografi
Kriptografi berasal dari bahasa Yunani, menurut
bahasa dibagi menjadi dua, yaitu kripto dan graphia.
Kripto berarti secret (rahasia) dan graphia berarti
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
553
writing (tulisan). Menurut terminologinya, kriptografi
adalah ilmu dan seni untuk menjaga keamanan pesan
ketika pesan dikirim dari suatu tempat ketempat yang
lain. Kriptografi pada awalnya dijabarkan sebagai ilmu
yang mempelajari bagaimana menyembunyikan pesan.
Namun pada pengertian modern kriptografi adalah
ilmu yang bersandarkan pada teknik matematika untuk
berurusan dengan keamanan informasi seperti
kerahasiaan, keutuhan data dan otentikasi entitas. Jadi
pengertian kriptografi modern adalah tidak saja
berurusan hanya dengan menyembunyikan pesan,
namun lebih pada sekumpulan teknik yang
menyediakan keamanan informasi. [2]
B. Algoritma Knapsack
Algoritma Knapsack adalah algoritma
kriptografi kunci publik, dimana keamanan algoritma
ini terletak pada sulitnya memecahkan persoalan
Knapsack (Knapsack Problem). Knapsack artinya
karung atau kantung, dimana karung mempunyai
kapasitas muat yang terbatas. [4] Tahapan dalam
membuat kunci publik dan kunci privat dalam
algoritma Knapsack adalah sebagai berikut:
1. Tentukan barisan superincreasing.
2. Kalikan setiap elemen di dalam barisan tersebut
dengan n modulo m. Modulus m seharusnya angka
yang lebih besar daripada jumlah semua elemen di
dalam barisan, sedangkan pengali n seharusnya
tidak mempunyai factor persekutuan dengan m.
3. Hasil perkalian akan menjadi kunci publik
sedangkan barisan superincreasing semula menjadi
kunci privat.
Sedangkan untuk proses enkripsi dilakukan
dengan tahapan sebagai berikut:
1. Enkripsi dilakukan dengan cara yang sama yaitu
dengan menggunakan algoritma Knapsack
sebelumnya.
2. Mula-mula plaintext dipecah menjadi blok bit yang
panjangnya sama dengan kardinalitas barisan kunci
publik.
3. Kalikan setiap bit di dalam blok dengan elemen
yang berkoresponden di dalam kunci publik.
Sementara untuk proses dekripsi dilakukan
dengan tahapan sebagai berikut:
1. Dekripsi dilakukan dengan menggunakan kunci
privat.
2. Awalnya penerima pesan menghitung n–1 , yaitu
balikan n modulo m, sedemikian sehingga n . n–1 ≡
1 (mod m). Kekongruenan ini dapat dihitung
dengan cara sebagai berikut:
a. n . n–1 ≡ 1 (mod m)
b. n . n–1 = 1 + km
c. n–1 = (1 + km)/n, dengan k sembarang bilangan
bulat
d. Kalikan setiap kriptogram dengan n–1 mod m,
lalu nyatakan hasil kalinya sebagai penjumlahan
elemen-elemen kunci privat untuk memperoleh
plaintext dengan menggunakan algoritma
pencarian menjadi superincreasing Knapsack.
C. Algoritma Base64
Transformasi Base64 merupakan salah satu
algoritma untuk Encoding dan Decoding suatu data ke
dalam format ASCII, yang didasarkan pada bilangan
dasar 64 atau bisa dikatakan sebagai salah satu metoda
yang digunakan untuk melakukan encoding
(penyandian) terhadap data binary. Karakter yang
dihasilkan pada transformasi Base64 ini terdiri dari
A..Z, a..z dan 0..9, serta ditambah dengan dua karakter
terakhir yang bersimbol yaitu + dan / serta satu buah
karakter sama dengan (=) yang digunakan untuk
penyesuaian dan menggenapkan data binary atau
istilahnya disebut sebagai pengisi pad. Karakter simbol
yang akan dihasilkan akan tergantung dari proses
algoritma yang berjalan. [11] Dalam Encoding Base64
dapat dikelompokkan dan dibedakan menjadi beberapa
kriteria yang tertera (Wahyu, dkk 2012), seperti yang
dapat dilihat di dalam tabel 1
Tabel 1 Encoding Base64
Data 6
bit
Karakter
Encoding 64
Data 6
bit
Karakter
Encoding 64
0 A 33 H
1 B 34 I
2 C 35 J
3 D 36 K
4 E 37 L
5 F 38 M
6 G 39 N
7 H 40 O
8 I 41 P
9 J 42 Q
10 K 43 R
11 L 44 S
12 M 45 T
13 N 46 U
14 O 47 V
15 P 48 W
16 Q 49 X
17 R 50 Y
18 S 51 Z
19 T 52 0
20 U 53 1
21 V 54 2
22 W 55 3
23 X 56 4
24 Y 57 5
25 Z 58 6
26 A 59 7
27 B 60 8
28 C 61 9
29 D 62 +
30 E 63 /
31 F Pad =
32 G
Teknik encoding Base64 sebenarnya sederhana,
jika ada satu (string) bytes yang akan disandikan ke
Base64 maka caranya adalah : [11]
1. Pecah string bytes tersebut ke per-3 bytes.
2. Gabungkan 3 bytes menjadi 24 bit. Dengan catatan
1 bytes = 8 bit, sehingga 3 x 8 = 24 bit.
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
554
3. Lalu 24 bit yang disimpan di-buffer (disatukan)
dipecah-pecah menjadi 6 bit, maka akan
menghasilkan 4 pecahan.
4. Masing masing pecahan diubah ke dalam nilai
decimal, dimana maksimal nilai 6 bit dalah 63.
5. Terakhir, jadikan nilai nilai desimal tersebut
menjadi indeks untuk memilih karakter penyusun
dari base64 dan maksimal adalah 63 atau indeks ke
64.
Dan seterusnya sampai akhir string bytes yang
mau dikonversikan. Jika ternyata dalam proses
encoding terdapat sisa pembagi, maka tambahkan
sebagai penggenap sisa tersebut karakter =. Maka
terkadang pada base64 akan muncul satu atau dua
karakter =.
III. ANALISA
A. Analisa Masalah
Misalkan pesan rahasia (plainteks) yang akan
dienkripsi adalah kata “Serang Markas Musuh”, maka
proses enkripsi dan dekripsinya adalah sebagai berikut:
1. Proses Pembentukan Kunci
Sebelum dilakukan proses enkripsi, terlebih dahulu
dibangkitkan kunci privat untuk menghasilkan
kunci publik. Adapun langkah-langkahnya adalah
sebagai berikut:
a. Input nilai bilangan integer pertama dan kedua
pada barisan superincreasing. Input pula nilai
pertambahan untuk membangkitkan barisan
superincreasing yang nantinya akan menjadi
kunci privat.
b. Pastikan bahwa nilai bilangan ketiga harus lebih
besar dari jumlah bilangan-bilangan
sebelumnya. Nilai tersebut didapat dengan cara
menjumlahkan semua bilangan sebelumnya dan
menambahkannya dengan nilai pertambahan
yang telah diinputkan.
Contoh:
Bilangan pertama = 2, bilangan kedua = 3, nilai
pertambahan = 2
Dengan demikian diperoleh:
Bilangan pertama = 2
Bilangan kedua = 3
Bilangan ketiga = (2+3+2) = 7
Bilangan keempat = (2+3+7+2) = 14
Bilangan kelima = (2+3+7+14+2) = 28
Bilangan keenam = (2+3+7+14+28+2) = 56
Bilangan ketujuh = (2+3+7+14+28+56+2) =
112
Bilangan kedelapan = (2 + 3 + 7 + 14 + 28 + 56
+ 112 + 2) = 224
Maka barisan superincreasing (kunci privat) = 2
3 7 14 28 56 112 224
c. Setelah diperoleh kunci privat, selanjutnya
bangkitkan kunci publik dengan terlebih dahulu
menentukan nilai m dan n, dimana m harus lebih
besar dari jumlah semua elemen didalam barisan
superincreasing (kunci privat) dan n tidak
mempunyai faktor persekutuan dengan m. Lalu
kalikan setiap elemen didalam barisan tersebut
dengan n modulo m.
2. Proses Enkripsi Algoritma Knapsack
Sebelum melakukan proses enkripsi, pertama sekali
yang harus dilakukan adalah melakukan proses
pembentukan kunci publik dan kunci privat seperti
berikut ini:
a. Tentukan barisan superincreasing
Misalkan bilangan pertama = 2, bilangan kedua
= 3 dan nilai pertambahan = 2
Dengan demikian diperoleh:
Bilangan keti ga = (2+3+2) = 7
Bilangan keempat = (2+3+7+2) = 14
Bilangan kelima = (2+3+7+14+2) = 28
Bilangan keenam = (2+3+7+14+28+2) = 56
Bilangan ketujuh = (2+3+7+14+28+56+2) =
112
Bilangan kedelapan = (2 + 3 + 7 + 14 + 28 + 56
+ 112 + 2) = 224
Maka barisan superincreasing (kunci privat) =
{2, 3, 7, 14, 28, 56, 112, 224}
b. Kalikan setiap elemen di dalam barisan tersebut
dengan n modulo m (m seharusnya angka yang
lebih besar daripada jumlah semua elemen di
dalam barisan, sedangkan pengali n seharusnya
tidak mempunyai factor persekutuan dengan m).
Nilai yang dipilih adalah m = 450 dan n = 31
Sehingga bila dihitung hasilnya adalah sebagai
berikut:
(2 * 31) mod 450 = 62
(3 * 31) mod 450 = 93
(7 * 31) mod 450 = 217
(14 * 31) mod 450 = 434
(28 * 31) mod 450 = 418
(56 * 31) mod 450 = 386
(112 * 31) mod 450 = 322
(224 * 31) mod 450 = 194
c. Hasil perkalian akan menjadi kunci publik
sedangkan barisan superincreasing semula
menjadi kunci privat.
Sehingga diperoleh:
Kunci publik = {62, 93, 217, 434, 418, 386, 322,
194}
Kunci privat = {2, 3, 7, 14, 28, 56, 112, 224}
Setelah proses pembentukan kunci selesai
dilakukan, maka tahap selanjutnya adalah
melakukan proses enkripsi.
Adapun tahapan proses enkripsi menggunakan
algoritma Knapsack adalah sebagai berikut:
a. Ubah karakter plainteks menjadi bilangan biner
8 bit. Seperti terlihat pada table 2
Tabel 2 Konversi karakter menjadi bilangan biner 8
bit
Pesan Desimal Biner
S 83 01010011
E 101 01010011
R 114 01110010
A 97 01100001
N 110 01101110
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
555
Pesan Desimal Biner
G 103 01100111
Spasi 32 00100000
M 77 01001101
A 97 01100001
R 114 01110010
K 107 01101011
A 97 01100001
S 115 01110011
Spasi 32 00100000
M 77 01001101
U 117 01110101
S 115 01110011
U 117 01110101
H 104 01101000
Setiap bit plainteks dikalikan dengan elemen
yang berkoresponden didalam kunci publik, dimana
kunci publik = {62, 93, 217, 434, 418, 386, 322, 194.
Seperti terlihat pada table 3
Tabel 3 Perkalian bit plainteks dengan elemen yang
berkoresponden pada kunci publik
Biner Kriptogram
01010011 (1 x 93) + (1 x 434) + (1 x 322) + (1 x 194) = 1043
01010011 (1 x 93) + (1 x 217) + (1 x 386) + (1 x 194) = 890
01110010 (1 x 93) + (1 x 217) + (1 x 434) + (1 x 322) = 1066
01100001 (1 x 93) + (1 x 217) + (1 x 194) = 504
01101110 (1 x 93) + (1 x 217) + (1 x 418) + (1 x
386) + (1 x 322) = 1436
01100111 (1 x 93) + (1 x 217) + (1 x 386) + (1 x
322) + (1 x 194) = 1212
00100000 (1 x 217) = 217
01001101 (1 x 93) + (1 x 418) + (1 x 386) + (1 x
194) = 1091
01100001 (1 x 93) + (1 x 217) + (1 x 194) = 504
01110010 (1 x 93) + (1 x 217) + (1 x 434) + (1 x
322) = 1066
01101011 (1 x 93) + (1 x 217) + (1 x 418) + (1 x
322) + (1 x 194) = 1244
01100001 (1 x 93) + (1 x 217) + (1 x 194) = 504
01110011 (1 x 93) + (1 x 217) + (1 x 434) + (1 x 322) + (1 x 194) = 1260
00100000 (1 x 217) = 217
01001101 (1 x 93) + (1 x 418) + (1 x 386) + (1 x
194) = 1091
01110101 (1 x 93) + (1 x 217) + (1 x 434) + (1 x
386) + (1 x 194) = 1324
01110011 (1 x 93) + (1 x 217) + (1 x 434) + (1 x
322) + (1 x 194) = 1260
01110101 (1 x 93) + (1 x 217) + (1 x 434) + (1 x
386) + (1 x 194) = 1324
01101000 (1 x 93) + (1 x 217) + (1 x 418) = 728
Dengan demikian, cipherteks_Knapsack yang
dihasilkan adalah:
1043 890 1066 504 1436 1212 217 1091 504 1066
1244 504 1260 217 1091 1324 1260 1324 728
3. Proses Enkripsi Algoritma Base64
Setelah diperoleh hasil enkripsi Knapsack
(cipherteks_Knapsack), tahap selanjutnya adalah
mengenkripsi cipherteks_Knapsack menggunakan
algoritma Base64, seperti berikut ini:
a. Ubah cipherteks_Knapsak menjadi bilangan
biner 8 bit. Seperti terlihat pada tabel 3.3
Tabel 4 Konversi cipherteks_knapsack menjadi
bilangan biner 8 bit
Karakter Desimal Biner
1 49 00110001
0 48 00110000
4 52 00110100
3 51 00110011
Spasi 32 00100000
8 56 00111000
9 57 00111001
0 48 00110000
Spasi 32 00100000
1 49 00110001
0 48 00110000
6 54 00110110
6 54 00110110
Spasi 32 00100000
5 53 00110101
0 48 00110000
4 52 00110100
Spasi 32 00100000
1 49 00110001
4 52 00110100
3 51 00110011
6 54 00110110
Spasi 32 00100000
1 49 00110001
2 50 00110010
1 49 00110001
2 50 00110010
Spasi 32 00100000
2 50 00110010
1 49 00110001
7 55 00110111
Spasi 32 00100000
1 49 00110001
0 48 00110000
9 57 00111001
1 49 00110001
Spasi 32 00100000
5 53 00110101
0 48 00110000
4 52 00110100
Spasi 32 00100000
1 49 00110001
0 48 00110000
6 54 00110110
6 54 00110110
Spasi 32 00100000
1 49 00110001
2 50 00110010
4 52 00110100
4 52 00110100
Spasi 32 00100000
5 53 00110101
0 48 00110000
4 52 00110100
Spasi 32 00100000
1 49 00110001
2 50 00110010
6 54 00110110
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
556
Karakter Desimal Biner
0 48 00110000
Spasi 32 00100000
2 50 00110010
1 49 00110001
7 55 00110111
Spasi 32 00100000
1 49 00110001
0 48 00110000
9 57 00111001
1 49 00110001
Spasi 32 00100000
1 49 00110001
3 51 00110011
2 50 00110010
4 52 00110100
Spasi 32 00100000
1 49 00110001
2 50 00110010
6 54 00110110
0 48 00110000
Spasi 32 00100000
1 49 00110001
3 51 00110011
2 50 00110010
4 52 00110100
Spasi 32 00100000
7 55 00110111
2 50 00110010
8 56 00111000
b. Pecah menjadi per 3 byte, dengan catatan 1 byte
= 8 bit, sehingga 3 x 8 bit = 24 bit. Bila ada yang
tidak lengkap 24 bit (3 byte), maka tambahkan
bit 0 untuk melengkapi (pad).
00110001 00110000 00110100
00110011 00100000 00111000
00111001 00110000 00100000
00110001 00110000 00110110
00110110 00100000 00110101
00110000 00110100 00100000
00110001 00110100 00110011
00110110 00100000 00110001
00110010 00110001 00110010
00100000 00110010 00110001
00110111 00100000 00110001
00110000 00111001 00110001
00100000 00110101 00110000
00110100 00100000 00110001
00110000 00110110 00110110
00100000 00110001 00110010
00110100 00110100 00100000
00110101 00110000 00110100
00100000 00110001 00110010
00110110 00110000 00100000
00110010 00110001 00110111
00100000 00110001 00110000
00111001 00110001 00100000
00110001 00110011 00110010
00110100 00100000 00110001
00110010 00110110 00110000
00100000 00110001 00110011
00110010 00110100 00100000
00110111 00110010 00111000
c. Kemudian bit-bit diatas dipecah menjadi
masing-masing 6 bit.
001100 010011 000000 110100
001100 110010 000000 111000
001110 010011 000000 100000
001100 010011 000000 110110
001101 100010 000000 110101
001100 000011 010000 100000
001100 010011 010000 110011
001101 100010 000000 110001
001100 100011 000100 110010
001000 000011 001000 110001
001101 110010 000000 110001
001100 000011 100100 110001
001000 000011 010100 110000
001101 000010 000000 110001
001100 000011 011000 110110
001000 000011 000100 110010
001101 000011 010000 100000
001101 010011 000000 110100
001000 000011 000100 110010
001101 100011 000000 100000
001100 100011 000100 110111
001000 000011 000100 110000
001110 010011 000100 100000
001100 010011 001100 110010
001101 000010 000000 110001
001100 100011 011000 110000
001000 000011 000100 110011
001100 100011 010000 100000
001101 110011 001000 111000
d. Ubah masing-masing bit menjadi index Base64,
lalu ubah menjadi karakter sesuai table encoding
Base64 (Tabel 2.1), dengan catatan bahwa jika
terdapat pad, maka pad tersebut akan diubah
menjadi karakter “=”. Seperti terlihat pada tabel
5
Tabel 5 Konversi bit menjadi karakter Base64
Bit Desimal Karakter Base64
001100 12 M
010011 19 T
000000 0 A
110100 52 0
001100 12 M
110010 50 Y
000000 0 A
111000 56 4
001110 14 O
010011 19 T
000000 0 A
100000 32 G
001100 12 M
010011 19 T
000000 0 A
110110 54 2
001101 13 N
100010 34 I
000000 0 A
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
557
Bit Desimal Karakter Base64
110101 53 1
001100 12 M
000011 3 D
010000 16 Q
100000 32 G
001100 12 M
010011 19 T
010000 16 Q
110011 51 Z
001101 13 N
100010 34 i
000000 0 A
110001 49 x
001100 12 M
100011 35 J
000100 4 E
110010 50 y
001000 8 I
000011 3 D
001000 8 I
110001 49 x
001101 13 N
110010 50 y
000000 0 A
110001 49 x
001100 12 M
000011 3 D
100100 36 k
110001 49 x
001000 8 I
000011 3 D
010100 20 U
110000 48 w
001101 13 N
000010 2 C
000000 0 A
110001 49 x
001100 12 M
000011 3 D
011000 24 Y
110110 54 2
001000 8 I
000011 3 D
000100 4 E
110010 50 y
001101 13 N
000011 3 D
010000 16 Q
100000 32 g
001101 13 N
010011 19 T
000000 0 A
110100 52 0
001000 8 I
000011 3 D
000100 4 E
110010 50 Y
Bit Desimal Karakter Base64
001101 13 N
100011 35 J
000000 0 A
100000 32 G
001100 12 M
100011 35 J
000100 4 E
110111 55 3
001000 8 I
000011 3 D
000100 4 E
110000 48 w
001110 14 O
010011 19 T
000100 4 E
100000 32 g
001100 12 M
010011 19 T
001100 12 M
110010 50 y
001101 13 N
000010 2 C
000000 0 A
110001 49 x
001100 12 M
100011 35 J
011000 24 Y
110000 48 W
001000 8 I
000011 3 D
000100 4 E
110011 51 Z
001100 12 M
100011 35 J
010000 16 Q
100000 32 G
001101 13 N
110011 51 Z
001000 8 I
111000 56 4
Dengan demikian, maka cipherteks_Base64
yang dihasilkan dari proses enkripsi Base64 diatas
adalah:
MTA0MyA4OTAgMTA2NiA1MDQgMTQzNiAxMj
EyIDIxNyAxMDkxIDUwNCAxMDY2IDEyNDQgN
TA0IDEyNjAgMjE3IDEwOTEgMTMyNCA
xMjYwIDEzMjQgNzI4
4. Proses Dekripsi Algoritma Base64
Setelah diperoleh hasil enkripsi Base64
(cipherteks_Base64), tahap selanjutnya adalah
mendekripsikan cipherteks_Base64 menggunakan
algoritma Base64, seperti berikut ini:
a. Ubah semua karakter cipherteks_Base64
menjadi nilai index berdasarkan table encoding
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
558
Base64. Setelah itu ubah lagi menjadi bilangan
biner 6 bit. Seperti terlihat pada tabel 6
Tabel 6 Konversi cipherteks_Base64 menjadi bilangan
biner 6 bit
Karakter
Base64 Index Bit
M 12 001100
T 19 010011
A 0 000000
0 52 110100
M 12 001100
Y 24 110010
A 0 000000
4 56 111000
O 14 001110
T 19 010011
A 0 000000
G 32 100000
M 12 001100
T 19 010011
A 0 000000
2 54 110110
N 13 001101
I 34 100010
A 0 000000
1 53 110101
M 12 001100
D 3 000011
Q 16 010000
G 32 100000
M 12 001100
T 19 010011
Q 16 010000
Z 51 110011
N 13 001101
I 34 100010
A 0 000000
X 49 110001
M 12 001100
J 35 100011
E 4 000100
Y 50 110010
I 8 001000
D 3 000011
I 8 001000
X 49 110001
N 13 001101
Y 50 110010
A 0 000000
X 49 110001
M 12 001100
D 3 000011
K 36 100100
X 49 110001
I 8 001000
D 3 000011
U 20 010100
Karakter
Base64 Index Bit
W 48 110000
N 13 001101
C 2 000010
A 0 000000
X 49 110001
M 12 001100
D 3 000011
Y 24 011000
2 54 110110
I 8 001000
D 3 000011
E 4 000100
Y 50 110010
N 13 001101
D 3 000011
Q 16 010000
G 32 100000
N 13 001101
T 19 010011
A 0 000000
0 52 110100
I 8 001000
D 3 000011
E 4 000100
Y 50 110010
N 13 001101
J 35 100011
A 0 000000
G 32 100000
M 12 001100
J 35 100011
E 4 000100
3 55 110111
I 8 001000
D 3 000011
E 4 000100
W 48 110000
O 14 001110
T 19 010011
E 4 000100
G 32 100000
M 12 001100
T 19 010011
M 12 001100
Y 50 110010
N 13 001101
C 2 000010
A 0 000000
X 49 110001
M 12 001100
J 35 100011
Y 24 011000
W 48 110000
I 8 001000
D 3 000011
E 4 000100
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
559
Karakter
Base64 Index Bit
Z 51 110011
M 12 001100
J 35 100011
Q 16 010000
G 32 100000
N 13 001101
Z 51 110011
I 8 001000
4 56 111000
b. Lalu pecah menjadi bilangan biner 8 bit.
00110001 00110000 00110100
00110011 00100000 00111000
00111001 00110000 00100000
00110001 00110000 00110110
00110110 00100000 00110101
00110000 00110100 00100000
00110001 00110100 00110011
00110110 00100000 00110001
00110010 00110001 00110010
00100000 00110010 00110001
00110111 00100000 00110001
00110000 00111001 00110001
00100000 00110101 00110000
00110100 00100000 00110001
00110000 00110110 00110110
00100000 00110001 00110010
00110100 00110100 00100000
00110101 00110000 00110100
00100000 00110001 00110010
00110110 00110000 00100000
00110010 00110001 00110111
00100000 00110001 00110000
00111001 00110001 00100000
00110001 00110011 00110010
00110100 00100000 00110001
00110010 00110110 00110000
00100000 00110001 00110011
00110010 00110100 00100000
00110111 00110010 00111000
c. Apabila terdapat bilangan biner 8 bit yang bernilai
0 diakhir, maka harus dibuang.
Selanjutnya ubah semua bilangan biner 8 bit
tersebut menjadi desimal. Setelah itu ubah nilai
desimal menjadi karakter berdasarkan table ASCII
untuk membentuk plainteks_Base64. Seperti
terlihat pada tabel 7
Tabel 7 Konversi Biner 8 bit menjadi karakter ASCII
Biner Desimal Karakter
00110001 49 1
00110000 48 0
00110100 52 4
00110011 51 3
00100000 32 Spasi
00111000 56 8
00111001 57 9
00110000 48 0
Biner Desimal Karakter
00100000 32 Spasi
00110001 49 1
00110000 48 0
00110110 54 6
00110110 54 6
00100000 32 Spasi
00110101 53 5
00110000 48 0
00110100 52 4
00100000 32 Spasi
00110001 49 1
00110100 52 4
00110011 51 3
00110110 54 6
00100000 32 Spasi
00110001 49 1
00110010 50 2
00110001 49 1
00110010 50 2
00100000 32 Spasi
00110010 50 2
00110001 49 1
00110111 55 7
00100000 32 Spasi
00110001 49 1
00110000 48 0
00111001 57 9
00110001 49 1
00100000 32 Spasi
00110101 53 5
00110000 48 0
00110100 52 4
00100000 32 Spasi
00110001 49 1
00110000 48 0
00110110 54 6
00110110 54 6
00100000 32 Spasi
00110001 49 1
00110010 50 2
00110100 52 4
00110100 52 4
00100000 32 Spasi
00110101 53 5
00110000 48 0
00110100 52 4
00100000 32 Spasi
00110001 49 1
00110010 50 2
00110110 54 6
00110000 48 0
00100000 32 Spasi
00110010 50 2
00110001 49 1
00110111 55 7
00100000 32 Spasi
00110001 49 1
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
560
Biner Desimal Karakter
00110000 48 0
00111001 57 9
00110001 49 1
00100000 32 Spasi
00110001 49 1
00110011 51 3
00110010 50 2
00110100 52 4
00100000 32 Spasi
00110001 49 1
00110010 50 2
00110110 54 6
00110000 48 0
00100000 32 Spasi
00110001 49 1
00110011 51 3
00110010 50 2
00110100 52 4
00100000 32 Spasi
00110111 55 7
00110010 50 2
00111000 56 8
Dengan demikian, maka plainteks_Base64 yang
dihasilkan dari proses dekripsi Base64 diatas
adalah:
1043 890 1066 504 1436 1212 217 1091 504 1066
1244 504 1260 217 1091 1260 1324 728
5. Proses Dekripsi Algoritma Knapsack
Setelah diperoleh hasil dekripsi Base64
(plainteks_Base64), tahap selanjutnya adalah
mendekripsikan plainteks_Base64 menggunakan
algoritma Knapsack, seperti berikut ini:
a. Tentukan terlebih dahulu nilai n invers dengan
rumus: n-1 = (1+k*m)/n, dimana nilai k adalah
dimulai dari nol (0).
Dengan m = 450, n = 31 dan menggunakan k =
29, maka diperoleh:
n-1 = (1 + 29*450) / 31 = 421
b. Tentukan nilai transformasi masing-masing
plainteks_Base64, lalu nyatakan hasilnya
sebagai penjumlahan elemen-elemen kunci
privat untuk memperoleh plainteks_Knapsack
dengan menggunakan algoritma pencarian
menjadi superincreasing Knapsack sehingga
didapatkan plainteks dalam bentuk biner.
Kunci privat = {2, 3, 7, 14, 28, 56, 112, 224}
1043*421 Mod 450 = 353 = 3 + 14 + 112 + 224,
berkoresponden dengan 01010011
890*421 Mod 450 = 290 = 3 + 7 + 56 + 224,
berkoresponden dengan 01100101
1066*421 Mod 450 = 136 = 3 + 7 + 14 + 112,
berkoresponden dengan 01110010
504*421 Mod 450 = 234 = 3 + 7 + 224,
berkoresponden dengan 01100001
1436*421 Mod 450 = 206 = 3 + 7 + 28 + 56 +
112, berkoresponden dengan 01101110
1212*421 Mod 450 = 402 = 3 + 7 + 56 + 112 +
224, berkoresponden dengan 01100111
217*421 Mod 450 = 7, berkoresponden dengan
00100000
1091*421 Mod 450 = 311 = 3 + 28 + 56 + 224,
berkoresponden dengan 01001101
504*421 Mod 450 = 234 = 3 + 7 + 224,
berkoresponden dengan 01100001
1066*421 Mod 450 = 136 = 3 + 7 + 14 + 112,
berkoresponden dengan 01110010
1244*421 Mod 450 = 374 = 3 + 7 + 28 + 112 +
224, berkoresponden dengan 01101011
504*421 Mod 450 = 234 = 3 + 7 + 224,
berkoresponden dengan 01100001
1260*421 Mod 450 = 360 = 3 + 7 + 14 + 112 +
224, berkoresponden dengan 01110011
217*421 Mod 450 = 7, berkoresponden dengan
00100000
1091*421 Mod 450 = 311 = 3 + 28 + 56 + 224,
berkoresponden dengan 01001101
1324*421 Mod 450 = 304 = 3 + 7 + 14 + 56 +
224, berkoresponden dengan 01110101
1260*421 Mod 450 = 360 = 3 + 7 + 14 + 112 +
224, berkoresponden dengan 01110011
1324*421 Mod 450 = 304 = 3 + 7 + 14 + 56 +
224, berkoresponden dengan 01110101
728*421 Mod 450 = 38 = 3 + 7 + 28,
berkoresponden dengan 01101000
c. Ubah nilai biner 8 bit pada plainteks_Knapsack
menjadi karakter ASCII. Seperti terlihat pada
table 3.7
Tabel 8 Konversi bilangan biner 8 bit pada plainteks_
Knapsack menjadi karakter ASCII
Biner Desimal Pesan
01010011 83 S
01010011 101 e
01110010 114 r
01100001 97 a
01101110 110 n
01100111 103 g
00100000 32 Spasi
01001101 77 M
01100001 97 a
01110010 114 r
01101011 107 k
01100001 97 a
01110011 115 s
00100000 32 Spasi
01001101 77 M
01110101 117 u
01110011 115 s
01110101 117 u
01101000 104 h
Dengan demikian maka diperoleh kembali plainteks
asli “Serang Markas Musuh”.
IV. IMPLEMENTASI
A. Implementasi Sistem
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
561
Implementasi sistem program ini mencakup
spesifikasi kebutuhan perangkat keras (hardware) dan
spesifikasi perangkat lunak (software).
Tampilan program terdiri dari print screen dari
tampilan input, output, danproses yang dirancangan.
Adapun tampilan program yang dirancang adalah
sebagai berikut:
1. Tampilan Menu Utama
Ketika aplikasi dijalankan, maka yang pertama kali
tampil adalah halaman utama. Pada halaman utama
ini terdapat 6 buah menu, yaitu menu pembentukan
kunci, proses enkripsi, proses dekripsi, tentang
mahasiswa, tentang aplikasi dan keluar. Tampilan
halaman utama dapat dilihat pada gambar 1
Gambar 1 Tampilan Halaman Utama
2. Tampilan Halaman Pembentukan Kunci
Knapsack
Halaman pembentukan kunci knapsack ini
berfungsi untuk membentuk kunci publik dan kunci
privat algoritma Knapsack. Dimana kunci publik
nantinya akan digunakan untuk melakukan proses
enkripsi dan kunci privat nantinya akan digunakan
untuk melakukan proses dekripsi. Tampilan
Halaman pembentukan kunci dapat dilihat pada
gambar 2
Gambar 2 Tampilan Halaman Pembentukan Kunci
3. Halaman Enkripsi
Halaman enkripsi merupakan halaman yang
digunakan untuk melakukan proses enkripsi file
teks (plainteks). Untuk melakukan proses enkripsi,
plainteks dapat diinputkan dengan 2 cara. Pertama
dengan mengetiknya langsung pada textarea atau
yang kedua dengan cara mencari file teks
menggunakan tombol Open File. Dan untuk kunci
publik Knapsack, sistem akan memanggil kunci
publik tersebut ketika halaman enkripsi muncul dan
menampilkannya pada textbox. Tampilan halaman
enkripsi dapat dilihat pada gambar 3
Gambar 3 Tampilan Halaman Enkripsi
4. Halaman Dekripsi
Halaman dekripsi ini merupakan halaman yang
digunakan untuk melakukan proses dekripsi. Untuk
melakukan proses dekripsi, user harus mencari file
teks (cipherteks) menggunakan tombol Open File.
Untuk kunci privat Knapsack, nilai M dan nilai N,
sistem akan memanggil kunci privat, nilai M dan
nilai N yang pernah disimpan lalu menampilkannya
pada textbox ketika halaman dekripsi muncul
pertama. Halaman dekripsi dapat dilihat pada
gambar 4
Gambar 4 Tampilan Halaman Dekripsi
B. Hasil Pengujian Program
Hasil pengujian program menampilkan hasil
output dari sebuah input data pada aplikasi yang telah
siap. Untuk pengujian programnya bisa kita lihat
sebagai berikut:
1. Proses Pembentukan Kunci
Sebelum melakukan proses enkripsi, pertama-tama
user harus menciptakan pasangan kunci publik dan
kunci privat terlebih dahulu, yang nantinya akan
digunakan untuk melakukan proses enkripsi dan
dekripsi pada algoritma Knapsack. Untuk
melakukan proses pembentukan kunci, jalankan
aplikasi sehingga akan muncul halaman utama.
Lalu klik menu Pembentukan Kunci, sehingga
halaman pembentukan kunci akan muncul.
Selanjutnya ketikkan nilai bilangan 1, nilai bilangan
2, dan juga nilai penambahannya. Setelah itu klik
tombol Proses Kunci untuk menciptakan nilai M,
nilai N, kunci publik dan juga kunci privat. Seperti
yang terlihat pada gambar 5
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
562
Gambar 5 Proses Pembentukan Kunci Algoritma
Knapsack
2. Proses Enkripsi
Setelah proses pembentukan kunci Knapsack
berhasil dilaksanakan, tahap selanjutnya adalah
melakukan proses enkripsi. Klik menu Proses
Enkripsi yang terdapat pada halaman utama,
sehingga akan muncul halaman enkripsi. Pada saat
halaman enkripsi muncul, maka sistem juga akan
menampilkan kunci publik algoritma Knapsack
yang telah disimpan sebelumnya, sehingga nantinya
akan dapat digunakan untuk melakukan proses
enkripsi. Kemudian klik tombol Open File untuk
mencari file teks asli (plainteks) yang akan di
enkripsi. Misalkan file teks yang akan di enkripsi
adalah “Kriptografi.txt” seperti yang terlihat pada
gambar 6
Gambar 6 Plainteks yang akan di enkripsi
Setelah plainteks muncul, selanjutnya klik tombol
Enkripsi untuk melakukan proses enkripsi. Setelah
proses enkripsi selesai dilakukan maka akan
menghasilkan cipherteks dan juga lamanya waktu
proses enkripsi. Serta akan muncul juga pemberitahuan
seperti terlihat pada gambar 7
Gambar 7 Proses Enkripsi Telah Selesai
Selanjutnya klik tombol “Save File” untuk
menyimpan file teks hasil proses enkripsi. Misalkan file
teks hasil enkripsi diberi nama “Cipherteks
Kriptografi.txt”, sehingga akan muncul pemberitahuan
bahwa file berhasil disimpan seperti yang terlihat pada
gambar 8
Gambar 8 Pemberitahuan File Hasil Enkripsi Berhasil
Disimpan
Setelah proses enkripsi selesai dilakukan dan hasilnya
berhasil disimpan, selanjutnya klik tombol Keluar
untuk menutup halaman enkripsi dan kembali ke
halaman utama.
V. KESIMPULAN
Berdasarkan hasil pengujian yang telah
dilakukan maka penulis mengambil beberapa
kesimpulan, diantaranya adalah sebagai berikut :
1. Sistem yang dibangun dapat mengamankan
(mengenkripsi) file teks dengan menggunakan
algoritma Knapsack dan Base64, serta
mengembalikan (mendekripsikan) kembali
dengan baik.
2. Semakin panjang jumlah karakter yang
dienkripsi, maka waktu yang dibutuhkan juga
akan semakin lama.
3. meningkatkan keamanan file teks dari tindakan-
tindakan pengerusakan atau hal-hal lain dari
orang-orang yang tidak bertanggung jawab.
4. Menghasilkan aplikasi yang dapat digunakan
untuk mengenkripsi dan dekripsi file teks dengan
menggunakan algoritma Knapscak dan Base64.
Jurnal Pelita Informatika, Volume 7, Nomor 4, April 2019
ISSN 2301-9425 (Media Cetak)
Hal: 552-563
563
REFERENCES
[1] Andi, Visual Basic 2012 Programming, Semarang, Wahana
Komputer. 2013
[2] Dony Ariyus, Kriptografi Keamanan Data dan Komunikasi,
Bandung, Graha Ilmu. 2006
[3] Dony Ariyus, Pengantar Ilmu Kriptografi Teori Analisis dan
Implementasi, Yogyakarta, Andi Offset. 2008
[4] Irawan R, Ilhamsyah dan Brianorman Y, 2015, Aplikasi
Enkripsi dan Dekripsi Pesan Singkat Menggunakan Algoritma
Knapsack Berbasis Android.
http:/jurnal.untan.ac.id/index.php/jcskommipa/article/downlo
ad/11753/1101
[5] Kusrini, M.kom,“Konsep dan Aplikasi Sistem Pendukung
Keputusan”,Penerbit Andi,Yogyakarta,2007.
[6] Kurniawan, Bahasa Baru untuk Dynamic Programming, Jakarta.
2011
[7] Nina Setyaningsih, “Profesional Pemrograman Visual Basic
2008", Penerbit Salemba Infotek, Jakarta, 2009
[8] Sentot Kromodimoeljo, 2010, Teori dan Aplikasi Kriptografi,
SPK Consuling.
http://download833.mediafire.com/xq74t9vavc6g/fxrzj3zug6
u1t2u/TeoridanAplikasiKriptografi.pdf
[9] Suarga, Algoritma dan Pemrograman, Yogyakarta, Andi
Offset. 2012
[10] Syaputra H dan Herdiyatmoko, 2012, Aplikasi Enkripsi Data
Pada File Teks Dengan Algoritma Rsa (Rivest
Shamir Adleman). http:download.portalgaruda.org/article.php?article=113607&
val=5187&title
[11] Wahyu F C, Rahangiar A P dan De Fretes F, 2012, Penerapan
Algoritma Gabungan RC4 dan Base64 Pada Sistem
Keamanan E-Commerce. http://journal.uii.ac.id/index.php/Snati/article/download/2873
/2628 [12] Widodo, Prabowo Pudjo dan Herlawati, Menggunakan UML,
Bandung Informatika. 2011