Implementasi Proteksi Ganda Dengan Menggabungkan Algoritma El Gamal dan Vigenere Cipher Ignatius Ronaldo Galman Kurniawan - 13509074 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia
[email protected]
Abstrak— Algoritma El Gamal adal ah algoritma kunci asimetrik yang digunakan untuk kriptografi kunci publik yang telah dikembangkan sedemikian rupa deng an berbasiskan pertukaran kunci DiffieHell man sehingga dapat digunakan untuk mel akukan enkripsi dan dekripsi pesan. Algoritma i ni memiliki keamanan yang relatif tinggi dikarenakan memecahkan masalah logaritma diskrit bukanlah perkara mudah bahkan deng an menggunakan kemampuan k omputasi dewasa ini yang notabene sudah sangat maju dan berkembang dengan pesat. Demikian pul a deng an Vigenere Cipher yang merupak an sebuah algoritma Kri ptografi klasik yang cukup populer. Oleh karena itu menarik untuk dii mplementasikan bagai mana penggabungan algoritma kriptografi modern dan klasik dan tentunya ada kelebihan maupun kekurangan yang ada dari hasil penggabung an algoritma El Gamal dan Vigenere Ci pher ini . Kata Kunci—Diffie-Hellman, El Gamal , Vigenere Cipher.
I. P ENDAHULUAN Kriptogtafi merupakan seni dan ilmu yang digunakan untuk menyembunyikan pesan yang memiliki beberapa terminologi dasar[1]. Terminologi dasar yang penting diantaranya adalah pengirim pesan, penerima pesan, pesan, plainteks, cipherteks, enkripsi, dekripsi dan kunci. Sejatinya Algorit ma El Gamal adalah algorit ma kriptografi modern yang digunakan pada mulanya untuk digital signature atau tanda tangan digital dengan berdasarkan pada prinsip pertukaran kunci DiffieHellman yang merupakan algorit ma kunci publik. Namun demikian, El Gamal mengalami modifikasi sehingga dimungkinkan melakukan enkripsi dan dekripsi pesan dengan menggunakan algorit ma in i. Vigenere Cipher merupakan sebuah Algoritma Kriptografi klasik yang memiliki 8 elemen tersebut. Disebut algorit ma klasik karena algorit ma in i tergolong algorit ma dasar karena menggunakan algorit ma berbasis karakter dan dapat dipecahkan tanpa menggunakan ko mputer. Akan tetapi algorit ma ini tentunya bisa diimp lementasikan ke dalam program ko mputer. Dalam makalah ini akan dibahas implementasi proteksi ganda dengan menggabungkan Algoritma Modern El Gamal dengan Algorit ma Klasik Vigenere Cipher. Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012
II. DASAR TEORI Algoritma El Gamal[1][2] Algorit ma El Gamal adalah algorit ma ekripsi/dekripsi dengan kunci asimetris untuk kriptografi kunci publik yang berdasarkan pada Algoritma Pertukaran kunci Diffie-Hellman[3]. Adalah seorang Mesir-A merika Taher El Gamal memperkenalkannya ke publik pada tahun 1984. Pertama kali dikemukakan di dalam makalah berjudul "A public key cryptosystem and a signature scheme based on discrete logarithms”. Keamanan algorit ma in i adalah bahwa perkara sulit untuk menghitung logarit ma diskrit. Ko mponen dari enkripsi El Gamal adalah : key generator, algorit ma en kripsi, dan algorit ma dekripsi. Properti dari A lgorit ma in i adalah: Properti Keterangan Bilangan Prima p Tidak rahasia Bilangan acak g (g < p) Tidak rahasia Bilangan acak x (x < p) Rahasia, Kunci Privat y = g x mod p Tidak rahasia, Kunci Publik Plaiteks m Rahasia Cipherteks a dan b Tidak rahasia Generate Key Melakukan generalisasi kunci adalah sebagai berikut: Pilih sembarang bilangan prima p ( p dapat dishare di antara anggota kelo mpok) Pilih dua buah bilangan acak, g dan x, dengan syarat g < p dan 1 x p – 2 Hitung y = g x mod p. Hasil dari algorit ma ini: Kunci Publik : triple(y, g, p) Kunci Privat : pair(x, p) Enkri psi Susun plainteks men jadi blo k-blo k m1 , m2 ,..., (nilai setiap blo k di dalam selang [0, p – 1]. Pilih bilangan acak k, yang dalam hal ini 1 k p – 2. Setiap blo k m dien kripsi dengan rumus a = g k mod p b = ykm mod p Pasangan a dan b adalah cipherteks untuk blok pesan m. Jadi, uku ran cipherteks dua kali ukuran plainteksnya.
Dekripsi Gunakan kunci p rivat x untuk menghitung (a x)– 1 = a p – 1 – x mod p
Misalkan plainteks huruf G dengan Kunci S, maka dengan tabel Vigenere akan dihasilkan perpotongan huruf G dan S yaitu huruf Y. Ilustrasi seperti gambar di bawah :
-
Hitung plainteks m dengan persamaan: m = b/a x mod p
= b(a x)– 1 mod p
Vigenere Cipher[1][5] Vigenere Cipher adalah metode enkripsi teks alfabet dengan menggunakan deretan Caesar Cipher berdasarkan huruf - huruf pada kunci. Vigenere Cipher ditemukan oleh Blaise de Vigenere dari Prancis pada tahun 1586. Walaupun metode ini sudah ditemukan sebelum Vigenere, yaitu oleh Giovan Bat ista Belaso pada tahun 1553, akan tetapi Vigenere lah yang menyempurnakan metode ini sehingga Vigenere leb ih dihormati dan algorit ma ini dinamai Vigenere Cipher. Metode ini sangat terkenal karena kemudahan untuk digunakan bagi semua orang dan sulit untuk dipecahkan bagi pemula pada zamannya. Metode ini baru bisa dipecahkan pada abad ke-19 o leh Charles Babbage, seorang matematikawan dari Inggris . Dan Friedrich Kasiski mempublikasikan cara memecahkan Vigenere Cipher, sehingga metode ini dinamakan tes Kasiski. Penggunaan Vigenere Cipher adalah oleh Tentara Konfederasi pada saat Perang Sipil A merika. Perang ini meletus setelah Vigenere Cipher berhasil dipecahkan. Cara Kerja Vigenere Cipher adalah menggunakan tabel Vigenere untuk melakukan enkripsi. Kolo m paling kiri menyatakan kunci, sedangkan bagian atas menyatakan plainteks. Setiap baris dari bu jur sangkar menyatakan cipherteks yang diperoleh dengan Caesar Cipher, yang pergeseran huruf ditentukan nilai desimal o leh huruf kunci. (a=0, b=1, ..., y = 24, z = 25).
Gambar 1 Ilustrasi Penggunaan Tabel Vigenere Dan Cipherteks dari “saya ganteng” dengan kunci “asd” adalah: Plainteks Kunci Cipherteks
: saya ganteng : asda sdasdas : ssba ydnlhny
Ru mus Matematis dari Vigenere Cipher adalah sebagai berikut: Ru mus En kripsi:
Ci Ci
= (P i + K i) mod 26 = ((Pi + Ki) – 26) mod
Pi+Ki Pi+Ki
< 26 > 26
26
Ru mus Dekripsi: Tabel Vigenere digunakan untuk memperoleh cipherteks dengan menggunakan kunci yang sudah tetap dengan panjang tertentu. Jika panjang kunci kurang dari plainteks, maka penggunaan kunci akan dilaku kan secara periodik. Contoh: Plainteks Kunci
: saya ganteng : asda sdasdas
Perhatikan bahwa kunci asd diulang sampai sejauh plainteks. Setiap huruf d i plainteks akan dienkripsi dengan kunci di bawahnya. Cara enkripsi adalah dengan menarik garis vertikal huruf plainteks ke bawah dan menarik garis horizontal huruf kunci ke kanan. Dengan demikian perpotongan kedua garis ini akan menghasilkan sebuah huruf yang merupakan sebuah cipherteks. Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012
Pi Pi
= (C i-Ki) mod 26 = ((C i-Ki ) + 26) mod 26
Dengan : Pi : nilai desimal karakter plainteks ke-i Ci : nilai desimal karakter cipherteks ke-i Ki : n ilai desimal karakter kunci ke-i Nilai desimal karakter adalah : A = 0, B = 1, C = 2, D = 3, . . . , Z = 25.
Ci–Ki Ci-Ki
> 0 < 0
III.
IM PLEM ENTASI DALAM PROGRAM DAN ANALISIS
KOM PUTER
Implementasi program in i memiliki ide sebagai berikut: Suatu pesan/file/plainteks P mu la-mu la akan dienkripsi dengan menggunakan Algorit ma El Gamal dan menghasilkan cipherteks C. Kemudian C akan men jadi plainteks untuk enkripsi kedua men jadi P’. P’ d ienkripsi lagi dengan Vigenere Cipher men jadi C’. Untuk melaku kan dekripsi maka C’ akan didekripsi dengan Vigenere Cipher menjadi P’, dan P’ akan didekripsi dengan El Gamal untuk mendapatkan kembali plainteks P. Fungsi – fungsi utama dalam p rogram adalah sebagai berikut:
Fungsi untuk generate key Fungsi untuk mengelo mpokkan dalam b lok sebelum dienkripsi secara El Gamal Fungsi untuk melaku kan enkripsi secara El Gamal Fungsi untuk melaku kan enkripsi secara Vigenere Fungsi untuk menyimpan cipherteks ke dalam file Fungsi untuk memuat cipherteks Fungsi untuk melaku kan dekripsi secara Vigenere Fungsi untuk melaku kan dekripsi secara El Gamal
Generate Key Melakukan generate terhadap p, g, x, y secara random. Program menyediakan fitur berupa dapat memilih panjang bit bilangan yang ingin digeneralisasi. public void generateKey(int numberBit) { p = BigInteger.probablePrime(numberBit - 1, new Random()); while ((g = new BigInteger(numberBit - 1, new Random())).compareTo(p) >= 0); while ((x = new BigInteger(numberBit - 1, new Random())).compareTo(p) >= 0); y = g.modPow(x, p); }
Enkri psi Pertama (El Gamal ) Enkripsi pertama d ilakukan dengan cara El Gamal dengan mengikuti ru mus – rumus yang sudah dijabarkan pada bagian dasar teori dimana hasil enkripsi in i akan menghasilkan rangkaian dari heksadesimal yang panjangnya dua kali dan berukuran dua kali pula dari panjang dan ukuran plainteksnya. Melakukan Pengelompokkan Bl ok Sesuai dengan rumus El Gamal bahwa sebelum dienkripsi rangkaian plainteks harus dipecah-pecah dan dipisah ke dalam kelo mpok tertentu.
Enkri psi Kedua (Vigenere) Menggunakan Ru mus En kripsi Vigenere Cipher 256 karakter: private byte encryptVigenere(byte input, char key){ return (byte)(((int)(input &0xff) + (int)key)%256); }
Dekripsi Pertama (Vigenere) Menggunakan Ru mus Dekripsi Vigenere Cipher 256 karakter: private byte decryptVigenere(byte input, char key){ return (byte)(((int)(input &0xff) (int)key)%256); }
Dekripsi Kedua (El Gamal) Dekripsi El Gamal in i juga dilaku kan dengan menggunakan rumus El Gamal yang sudah dibahas dalam dasar teori. Dekripsi ini Ujicoba program: Skenario Ujicoba Program adalah sebagai berikut : Melakukan Load terhadap file teks Test.txt Melakukan Generate Key dengan panjang bit kunci 1000 bits Memasukkan kata kunci “VigenereCipher” untuk enkripsi kedua Menyimpan file cipherteks yang sudah dienkripsi dua kali dengan nama Cipher.t xt Melakukan load file cipherteks yang dimaksud dan melaku kan dekripsi. Plainteks kembali seperti semula .
Input: Berkas teks Teks Sebenarnya Aku ingin begini . Aku ingin begitu . Ingin in i , ingin itu banyak sekali . . Semua, semua, semua Dapat dikabulkan dapat dikabulkan dengan kantong ajaib Aku ingin terbang bebas di angkasa "Hey! Baling-baling Bambu!!" La,la,la Aku sayang sekali... Doaremon... La,la,la aku sayang sekali Doraemon... Dalam Heksadesimal 416B7520696E67696E20626567696E69202E0D0A416B7520
Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012
696E67696E20626567697475202E0D0A496E67696E20696E 69202C20696E67696E206974752062616E79616B2073656B 616C69202E202E0D0A0D0A53656D75612C2073656D75612C 2073656D75610D0A44617061742064696B6162756C6B616E 0D0A64617061742064696B6162756C6B616E2064656E6761 6E206B616E746F6E6720616A6169620D0A0D0A416B752069 6E67696E2074657262616E6720626562617320646920616E 676B6173610D0A22486579212042616C696E672D62616C69 6E672042616D62752121220D0A0D0A4C612C6C612C6C610D 0A416B7520736179616E672073656B616C692E2E2E0D0A44 6F6172656D6F6E2E2E2E0D0A0D0A4C612C6C612C6C612061 6B7520736179616E672073656B616C690D0A446F7261656D 6F6E2E2E2E
Nilai p: 5269806298302442448805339068623952727515309781 4183557526223766612701895460177278682611321423 8628120209300577071158656494933298558077201651 9836479765222431183906154932502872885795007128 4499322704413330304467406875513633682660272253 3326107534502140668508724135368903325860245399 6279029411601314689650811 Nilai g: 2494546075204825813692230069242909497667566923 9574728639785617101816563075268699560575313597 1557511785597358942415629727135869775074880523 0535275448167025623029897914743042821003823963 9290406312757642230928495477229734752632778313 5318418501512724794861818721429683579591070914 7330067029141203837333960 Nilai x: 9572702698229201597791768999288049670256114352 6355202002435429778823256470736407314295261539 5166817670630957919577124101252125157474144760 1772859105309760907935881920010492958500001114 8660904981609394635750031651452848694613701833 5249983777632600224316922992432852013744722152 064724254623503130903969
1F8EBC0C88230357256F6933DD68B71806E2A080ED4E8314 B6A5168AB44302A86DE3745D962BFC241EF3C395AA795F86 2DDD31846CF07303B5053B9192F620B3D16FF2E5B36B42EC 58FF373058F006FC1D58DE7D8AAC0AC78B27CBF8056A8A12 86A64167D007BD6C60558016A468212E5767207AA0D3BC63 5A399A21587EB9AA04D53B2523523AB1153177319AF73391 D478B39E3D60DBBDB1CDC93EA66515ED8DEA600C5BE6BE13 9409C04B966FCFE77C48652870D1CB534D38711E1631B812 E01FD4FF7F91D12948955EF69A5B0D697A6FCA9AF5A1CD44 321D2324907B680752330A2E4DFA1355023EBA63061725BC 2CBCE79006DACC15B6B6E3781E883A167B74FB56FB324F46 3716C7A062DBAAEC0911B3759A540994A07F525865B8C4D8 BD2AFA0F884F4318BD6237BE6C1F48AC0A732DE6F9D9E2B9 112F939394665C72D6D48CB319C8992F3264223E11FF218D 64DD47950FFDAB51BCA1B00B931761E7AB331612567CF12D DE4E07A7CE3073A0D4DE51EBF46D25BBC350D8DA7881AD12 AD5BE133061DE5ADFEBD1F886A2A99EAA0AC34B2D3F566F2 A7D9202691BDDAB8251CD2422D4986C33924987B9C0A1D4F 2FA85C1A466FB5627B65BF15A09CAF609B674ED05B18246F 9B505D0422CB4695868D8B426B286A31EF49263D175177EF 1600246DFC1A
Teks sebenarnya 㜀爻꽝ꇾ 輣⧨ﴐ㫶 ⧨⧨呷⧨ᆆ웏쟵 捴׳ꌡ 挓⧨疏遗 ම긤㋲嵶猻䉾財릁횟Ⴙ⧨씻焳忲⧨퇇ɽ唏饆鶳⻖ㆲ惍輍鵟 庨立⧨춓ﳺ鶰 䊚⧨ﻘ㣼봎 ジ쭙㕎黜쉖鏡
쯈
ㅤ
睪銕蚴⧨⧨㼒㏗妏 꺻맚詋됉⧨ۼ儉• 懐磹 뎃 蛼㽤켺 잕 壘 뙙⧨틾햡怮餈窤 헣⧨⧨⧨ 쿙 皘뜢⧨⧨돟账Հ 餴⧨逞踟 ⎈圃漥㍩棝⧨ 肠仭ᒃ⧨訖䎴⧨ 嵴⧨⓼ 闃禪 號萱⧨⧨ 鄻 댠濑 殳 x〷 ﰆ堝緞겊윊➋ 樅ኊ⧨杁 ⧨沽啠⧨梤⧨杗稠펠掼㥚↚繘⧨프┻刣넺ㄕㅷ 鄳磔麳 怽뷛춱㻉斦
ౠ Ꮎঔ䯀澖 䡼⧨텰友㡍ṱㄖኸῠᅯ酿⧨
镈 定植潺髊ꇵ䓍ᴲ␣箐ݨ㍒⧨祉唓㸂掺⧨밥밬郧ᗌ뚶磣 蠞ᘺ瑻囻㋻䙏ᘷꃇ ᄉ疳咚鐉羠塒롥⧨⧨侈ᡃ抽븷Ὤ걈猊 맢⧨鎓暔牜퓖뎌젙⧨搲㸢1贡镇ﴏ冫ꆼரន ㎫ሖ籖⧨仞 ⧨ノꁳ 淴묥僃腸ክ宭㏡ᴆ귥뷾蠟
겠눴
☠붑룚⧨䋒
䤭쎆⧨箘જ伝⧨⧨潆抵敻ᖿ鲠悯枛큎ᡛ漤傛ѝ쬢镆趆䊋⧨ Nilai y: 4863913975640194054239130951813900075870166106 1760769848904388844680852706566125828218318110 9791010572662646551320962710146911389671153369 4384585043880707251698145684346983649182930172 5447401998904756671083806042518378246806597982 6867723081624989537965472503741530962214459304 7425362372833870211823232 Output: Cipherteks 1 (El Gamal) Dalam heksadesimal 3B725DAFFEA1CB09238F10FDE8297CDFF63A5BE718A90DA9 7754290C8611CFC6F5C70EEF7463F30521A354E113633324 8F755790B80D24AEF232765D3B737E42A18C81B99FD6B910 4D2A3BC53371F25F7733C7D17D020F554699B39DD62EB231 CD600D8F5F9D58EEA85ECB7AF01A93CDFAFCB09DB7F69A42 D8FEFC1AFC380EBDB8F1B83059CB4E35DC9E56C2E1939F1B 8EF1C8CB16F2470464316A779592B4867F2DCF2D123FD733 8F5907E8BBAEDAB94B8A09B4FC06BF2D09517F00D061F978 F1F683B344EBFC86643F3ACF95C704EBD85832EA59B6621A FED2A1D52E600899A47A56DF4BEB52F2E3D549A5551CFD2B D9CF13F6987622B75D2B502CDFB3268D40053499352F1E90
Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012
ㅪ䧯㴦儗 洤⧨
Cipherteks 2 (El Gamal + Vigenere) Dalam heksadesimal 7B5B74144D23336A0A89858196F2CF28EC97A067621BBF5A 24718AAF31810AFC94AB97EE4C82A3A8A95C2AF9E8977ABF 0221F5DE695A5A4C1870978EDCE8261CF28EBCEE9436FF3B AE7CC6BCCAC07F32ADA014A238FA1CB45B55BF731D505F87 BB695B1002E18EFF62A3B4E203C0BA45006E6B2CFE8FAC02 D7D50F661F180A53EA4512BCF182D11509CF7B3883826A87 D2B1531DDE98C10D18F6E0E9E45BA5BAE8ACF08E6559BE62 BFAAA1CF8C15B1B72F1717E18C0838CCAF23740E6843131E C5BC038476F8642822D0545E0DE353706B2FAE7E4607849B 8557679E52D7213D65936FD889D9EEDEF97A352A8A602A3C 9F40780393B9512C3F8B67AD7A7437B3F694AD2A256FBA10 2420D8553C9A5D1989336B7F6386D2E43C144F66C21A7193 173949B11A70EE0594E99A57BCA22ADE8F995D36C60C494B 2711EA1FA4219E1DC875980B6A8E7C399842941D83C7F7C3 2850628BF76AA567E6A14A60694E9F0438EED4008B6E5892 5F1CAEC27689F27F44E8096B47BC800C188D13D3568BB238 57F07CA4BFFBF04BEA456C650E7DF699A3D99921B0EA9B13 B0F72812C6E30ED75A573C3CE9098D9C183062CBE5A6E3A7
D746896F0AFE2A4F89BA752D3D51DAAD519DDA8845B051CC 03B95C4731DF7AE4285DC20A8A3E4EE377AC6BCA2F9A9DA0 E999F5E1E73D579D5B4D50EEE798390EF1CF3DF972A0CEFA A8AC54320D226FE93E132F38D5203BB1F0CEC11E494D5458 2086280DFDEF353B6E3B7AB51C460BFAAE4C17FD00AA3FDE 9BD503CBE5783533A57A0B5C379B12EE08A39BD26D61A413 865F7819049D7CD88A0ADAB4AB381B87A6964A9D021D6AA4 B834D9F9D775B71188C7FDCE9F6D4807A5F21A6076F70F85 F21894010A0356FAF5FE38971FB4D487971CC09615AA7C24 053AF583FE995BB33DF75C0EC4D6E40085B1E79FB34110A8 09E57A0970AD7FF2AD55DAD316F53629A486D6C9C22F35F2 DBD2DDDD210DACE05724D821BD01313366448A4CAF02ED06 F8BC5C5126757BB58E330D015F526E7937E4DD67B9201923 DEED39EB6E55
Teks sebenarnya ꁖ샢秢袿퍶
寬贶ﱚ찒蒥숯 ⧨ 慸⧨埚 ⧨엿庑⓬ﱖ詅
䙥쳎떰핿 䵎蕩 怡⧨ꁦ ℸ⤍髯ሒ୪徟⧨뫍뢍龍툑痂䙰 絁䅮ꇑ
ᙄ蚖N缦彮乇
쁒⧨ᔫ 쯊쬔༦ 㐏竾⧨羟卼燢㆟蠝珦겫蚃
川跒㖔잗䭽
搀ಥ䨤㉨긐퍧釙 毯㵇腵롱
飁 沴ö새 䦷
㷝㻻䜱 鲚짠ꆑ⧨棪⋖铁⧨ﶤᢥ泌鏰
힕舟襺먿ᆰ经鳌
䴨禣쮽缴ﲴꆇ⎮橕丂밌⧨䚚௴龳焭
IV. KESIMPULAN Menggabungkan algorit ma en kripsi El Gamal dan Vigenere Cipher adalah menggabungkan seni enkripsi modern dan klasik. Dan dengan menggunakan teknik in i, ketangguhan algoritma El Gamal yang terkenal akan semakin bertambah dengan adanya perlindungan ganda dengan menggunakan Vigenere Cipher. Keunggulan dari algorit ma ini tentunya adalah semakin menyulitkan penyadap yang tidak berhak yang ingin membaca pesan. Karena selain dengan El Gamal stand alone pun sudah sulit dipecahkan, apalagi dengan teknik in i, penyadap harus menemukan kunci Vigenere terlebih dahulu baru kemudian memecahkan El Gamal. Kekurangan dari teknik ini adalah kepraktisannya menjadi berkurang, karena Vigenere yang merupakan algorit ma kunci simetrik, maka dalam mengirimkan kunci untuk Vigenere harus melalui saluran yang aman. .
REFERENSI [1] [2]
낷皙蠭褔較烿 黮⧨蔄㧨⧨떏 콩탨⧨튯랿椆厦敆⧨⧨ 軄⬄
⧨푌Ⓑ绥 㡺 鴤妚೬洤둆⧨쫚
瞚䰉㽾즿⧨湐ǻ閊㒥๕⧨꼭퓰捸뒜⏌闥쎢ᘰ
䄓鏾匆砂尞 ᖷ㖔ⅳ링䢇
䧡슖漴⧨䮾Ờ㏁ヨԋ﹛䨸⧨ 뚱厷ﵕ玫㠴憭⧨挤ᄏ韂蝿劲 箮⧨褫⧨㍞茳뚌샄 百呤ꂣꃠẽ꺌汰딄找⧨䎱㻞㍳ 鲋셹 ©坕⧨䐀쫃砋쓴绪ه䃬糯ᴰ鴒 ⧨ڍ蕲⧨鴎幀瘩ニ㙭炞圌얈 峨 聢珹池徽捣 ﲪ軼6 觪齷 ◀悓珃㬲敖⧨ݗ댘ᅦ 䩰滨ዢ寂봝䔿幬躝 ⧨項媥䑀䘳犈䔚觉訛椭⧨궼뇱朝歟 ┻만 飵晻럑 䲧褏袀剌傫뺱
[3] [4] [5]
Munir, Rinaldi. 2006. Kriptografi. Bandung: Informatika. http://agcrypt.wordpress.com/2008/02/25/elgamalalgorithm/http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellma n_key_exchange http://www.rsa.com/rsalabs/node.asp?id=2248 http://malware.cbronline.com/news/father-of-ssl-says-the-badguys-are-winning http://www.braingle.com/brainteasers/codes/vigenere.php
P ERNYATAAN Dengan ini saya menyatakan bahwa makalah yang saya tulis ini adalah tulisan saya sendiri, bukan saduran, atau terjemahan dari makalah orang lain, dan bukan plagiasi. Bandung, 11 Mei 2012
Screenshot program:
ttd
Ignatius Ronaldo Galman Kurn iawan – 13509074
Gambar 2 Screenshot Ujicoba Program
Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012
Lampiran Kode Su mber Fungsi Pengelompokkan Blo k Private LinkedList
createBlockCollection(byte[] buffer) throws NullPointerException, IOException { int length = (int) Math.ceil(((double)p.bitLength() + 1)/8) - 1; LinkedList result = new LinkedList(); int i = 0; int j = 0; while (i < buffer.length) { byte[] temp = null; BigInteger tempBig = null; temp = new byte[length]; if (i + length >= buffer.length) { System.arraycopy(buffer, i, temp, length buffer.length + i, buffer.length - i); padding = (short)(length - buffer.length + i); } else System.arraycopy(buffer, i, temp, 0, temp.length); tempBig = new BigInteger(1,temp); result.add(tempBig); i += temp.length; } return result; }
Fungsi Enkripsi Vigenere saat Save File public long saveData(File fileout, LinkedList input, boolean raw, String key) throws IOException { FileOutputStream fos = new FileOutputStream(fileout); int j = 0; if (!raw) { byte[] temp1 = shortToByteArray(padding); for (int i = 0; i < temp1.length; i++){ temp1[i] = encryptVigenere(temp1[i], key.charAt((j++)%key.length())); } fos.write(temp1); for (int i = 0; i < input.size(); i++) { byte[] temp = input.get(i); for (int k = 0; k < temp.length; k++){ temp[k] = encryptVigenere(temp[k], key.charAt((j++)%key.length())); } fos.write(temp); } } else { for (int i = 0; i < input.size(); i++) fos.write(input.get(i)); } fos.close(); return fileout.length(); }
Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012
Fungsi Dekripsi Vigenere saat Load File public LinkedList loadCipherTeks(File filein, String key) throws IOException, NullPointerException { int length = (int) Math.ceil(((double)p.bitLength() + 1)/8) * 2; LinkedList result = new LinkedList(); FileInputStream fis = new FileInputStream(filein); byte[] bytePadding = new byte[2]; fis.read(bytePadding); int j = 0; bytePadding[0] = decryptVigenere(bytePadding[0], key.charAt((j++)%key.length())); bytePadding[1] = decryptVigenere(bytePadding[1], key.charAt((j++)%key.length())); padding = byteArrayToShort(bytePadding); while (fis.available() != 0) { byte[] buffer = new byte[length]; fis.read(buffer); for (int k = 0; k < buffer.length; k++){ buffer[k] = decryptVigenere(buffer[k], key.charAt((j++)%key.length())); } result.add(buffer); } fis.close(); return result; } protected static String byteArrayToString(byte[] input) { StringBuilder result = new StringBuilder(); for (int i = 0; i < input.length; i++) { result.append(HexStringTable[input[i] & 0xff]); } return result.toString();
} Fungsi Enkripsi El Gamal public LinkedList encryptData(byte[] data) throws NullPointerException, IOException { int length = (int) Math.ceil(((double)p.bitLength() + 1)/8); LinkedList blockCollection = createBlockCollection(data); LinkedList result = new LinkedList(); for (int i = 0; i < blockCollection.size(); i++) { BigInteger k = null; BigInteger a = null; BigInteger b = null; byte[] cipher = new byte[2 * length]; while ((k = new BigInteger(p.bitCount() - 2, new Random())).compareTo(p.subtract(new BigInteger("2"))) > 0 || k.compareTo(new BigInteger("1")) < 0); a = g.modPow(k, p); b = y.modPow(k, p).multiply(blockCollection.get(i)).mod(p); int sizeA = a.toByteArray().length; int sizeB = b.toByteArray().length; System.arraycopy(a.toByteArray(), 0, cipher, length - sizeA, sizeA);
System.arraycopy(b.toByteArray(), 0, cipher, cipher.length - sizeB, sizeB); result.add(cipher); } return result; }
Fungsi Dekripsi El Gamal public LinkedList decryptData(LinkedList cipherCollection) { int length = (int) Math.ceil(((double)p.bitLength() + 1)/8); int blockLength = (int) Math.ceil(((double)p.bitLength() + 1)/8) - 1; LinkedList result = new LinkedList(); for (int i = 0; i < cipherCollection.size(); i++) { byte[] tempA = new byte[length]; byte[] tempB = new byte[length]; byte[] cipher = cipherCollection.get(i); byte[] plain = null; BigInteger a = null; BigInteger b = null; System.arraycopy(cipher, 0, tempA, 0, length); System.arraycopy(cipher, length, tempB, 0, length); a = new BigInteger(1,tempA); b = new BigInteger(1,tempB); BigInteger tempKey = a.modPow(p.subtract(x).subtract(new BigInteger("1")), p); plain = b.multiply(tempKey).mod(p).toByteArray(); if (plain.length < blockLength) { byte[] tempPlain = null; if (i == cipherCollection.size() - 1) tempPlain = new byte[blockLength - padding]; else tempPlain = new byte[blockLength]; System.arraycopy(plain, 0, tempPlain, tempPlain.length - plain.length, plain.length); plain = tempPlain; } else if (plain.length > blockLength) { byte[] tempPlain = new byte[blockLength]; System.arraycopy(plain, 1, tempPlain, 0, tempPlain.length); plain = tempPlain; } // System.out.println(i + " " + new BigInteger(1,plain)); result.add(plain); } return result; }
Makalah IF3058 Kriptografi – Sem. II Tahun 2011/2012