SlideShare une entreprise Scribd logo
1  sur  14
MAKALAH JAVA CRYPTOGRAPHIC
EXTENSION
KEAMANAN DATA
M.MISBAKHUL MUNIR
7410040048
3 D4 TI B
Politeknik Elektronika Negeri Surabaya (PENS)
2013
JAVA CRYPTOGRAPHIC EXTENSION
(JCE)
I. Pendahuluan
API yang pertamaadalahJCA (Java Cryptography Architecture), merupakan framework sekuriti
yang diintegrasikanbersamainti (core) dari Java API. JCA banyakdikeluhkanmenyediakankriptografi yang
kurang 'kuat', dimanapanjangkuncikriptografi yang diperbolehkanhanyasampaimaksimum 128 atau 256
bit. Sudahbarangtentukuncikriptografi yang tidak 'kuat' ataupanjang bit kunci yang pendekmaka hacker
yang memecahkankriptografitersebut (cipher) hanyamemerlukanwaktu yang tidakterlalu lama. Lokasi
JCA terletakpadapaketjava.security.
API yang keduaadalah JCE (Java Cryptography Extension), merupakan framework
sekuritiekstensidari Java.Iamenyediakanekstensiuntukkriptografi yang kuat, diperbolehkanuntuk di-
eksporolehpemerintah US setelahkebijakanmengenaieksportahun 2000. JCE
mulaidiperbolehkansebagaiopsipakettambahanpada JDK v 1.2.x dan 1.3.x, sedangkanpada JDK v 1.4.x
telahdiintegrasikan.API JCE diimplementasioleh Cryptographic Service Providers.Pada JDK v 1.4.x
keatassecara default API service-provider nyaadalahSunJCE.Dengan JCE
makamemberikeleluasaankepadakita (memprogram java kriptografi) untukmemakaiimplementasidari API
service-provider yang diinginkan.Lokasi JCE terletakpadapaketjavax.crypto.
Symmetric dan Asymmetric Cryptography
merupakanjenisalgoritmakriptografiberdasarkanpenggunaankunci.Singkatnya, kriptografi symmetric
menggunakankunci yang samauntukmelakukan proses enkripsidandekripsisedangkankriptografi
asymmetric menggunakankunci yang berbedauntuk encrypt dan decrypt. Contohalgoritma symmetric
adalah AES, DES, RC4 dllsedangkan asymmetric adalah RSA, Elgamaldll.Gambardibawahinimerupakan
proses enkripsidandekripsialgoritma symmetric dan asymmetric.
Symmetric Algorithm Asymmetric Algorithm
Padaalgoritma asymmetric, terdapatduabuahkunciyaitukuncipublikuntuk encrypt dankunci private
untuk decrypt. Ketikaseseorang (misal Alice) akanmengirimkanpesanke Bob, maka Alice
akanmengenkripsipesantersebutmenggunakankuncipublik Bob dan Bob akanmembukapesan yang
diterimanyamenggunakankunci private. Hal tersebutmerupakankelebihanpadasistem asymmetric karena
user cukupmenyimpansecararahasiakunci private miliknya,
sedangkankuncipublikdapatdisebarkankeseluruh user yang
inginberkomunikasidengannyatanpaperlukhawatir orang yang
tidakberhakdapatmembukapesanmenggunakankuncipublik yang telahdisebartersebut.
Padasistem symmetric, kunci yang digunakanuntuk encrypt dan decrypt adalahsama, sehingga
user yang salingberkomunikasimenggunakansistem symmetric harussalingberkirimkunci yang
samakarenajikamerekatidakmenggunakankunci yang samamakapesantidakdapatterbuka di sisipenerima.
Jikaterdapatseseorang yang berada di tengah2 proses
kirimterimakuncidanberhasilmendapatkankuncitersebutmakamakasemuapesandapatterbuka.
Berbedadengansistem asymmetric, user hanyaperlu mengirimkankuncipubliksupaya orang
laindapatberkomunikasidengandirinya. User tidakperlutakutpenyerangdapatmerekonstruksi private
key darikuncipublik yang didapatkannya.
Kompleksitaspendistribusiankunci
pada symmetric lebihtinggidibandingkandengan asymmetric. Setiapsatukuncipada symmetric digunakano
lehdua user atausatugrupuntukberkomunikasi. Sayailustrasikansebagaiberikut, ketika user A
akanberkomunikasidengan user B merekamenggunakankunci X danketika user A berkomunikasidengan
user C merekaakanmenggunakankunci Y. Makaketika user B,C,D akanmengirimkanpesanke user A, user
A akanmenggunakan 3 buahkunci yang berbedauntukmembukapesan yang diterima.
Berbedadengansistem asymmetric,user B,C,D cukupmenggunakankuncipublik A
untukmengirimkanpesandan A cukupmenggunakankunci private nyauntukmembukapesantersebut.
Akan tetapi, sistem symmetric lebihcepatdalamkomputasidan ciphertext yang
dihasilkanlebihsedikitsehinggatidakmembebanibandwithpadasaat proses pengirimanpesan.
Biasanya symmetric dan asymmetric seringdigunakanbersamaanpadasuatusistem.Sebagaicontohpadasiste
m video conference
Agievic, asymmetric digunakanuntukpendistribusiankunci symmetric, kunci symmetric inidigunakanuntu
kuntukmengenkripsikomunikasi video conference
AES (Advance Encryption Standart)
Advanced Encryption Standard (AES) merupakanalgoritmakriptografi simetrik yang
dapatdigunkanuntukmengamakan data.Algoritma AESadalahblokchipertextsimetrik yang
dapatmengenkripsi (encipher) dandekripsi (decipher) informasi. Enkripsimerubah data yang
tidakdapatlagidibacadisebutciphertext.sebaliknyadekripsiadalahmerubahciphertext data
menjadibentuksemula yang kitakenalsebagai plaintext. Algoritma AESmengunakankuncikriptografi 128,
192, dan 256 bits untukmengenkripdandekrip data padablok 128 bits.
DES (Digital Encryption Standart)
Secure random key. DES (Data Encryption Standard) adalahalgoritmacipher blok yang
populerkarenadijadikan standard algoritmaenkripsikunci-simetri, meskipunsaatini standard
tersebuttelahdigantikandenganalgoritma yang baru, AES, karenaDES sudahdianggaptidakamanlagi.
SebenarnyaDES adalahnama standard enkripsisimetri, namaalgoritmaenkripsinyasendiriadalahDEA
(Data Encryption Algorithm), namunnamaDES lebihpopulerdaripadaDEA. AlgoritmaDES
dikembangkan di IBM dibawahkepemimpinan W.L. Tuchman padatahun
1972.AlgoritmainididasarkanpadaalgoritmaLucifer yang dibuatoleh Horst
Feistel.AlgoritmainitelahdisetujuiolehNational Bureau of Standard (NBS)
setelahpenilaiankekuatannyaolehNational Security Agency (NSA) AmerikaSerikat.DES
termasukkedalamsistemkriptografisimetridantergolongjeniscipher blok. DES beroperasipadaukuranblok
64 bit. DES mengenkripsikan 64 bit plainteksmenjadi 64 bit cipherteksdenganmenggunakan 56 bit kunci
internal (internal key) atauupa-kunci(subkey). Kunci internal dibangkitkandarikuncieksternal(external
key) yang panjangnya 64 bit.
II.Menginstall JCE
Berikutiniadalahcaramenginstall JCE ke JDK API kita.
1. Download Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
disiniuntuk yang menggunakan JDK 7. Jikamenggunakan JDK selainitubisadisesuaikan.
2. Uncompressdanekstrak file yang didownloadtadi. Iniakanmembuatsubdirektori JCE.
Didalamdirektoritersebutakanterdapat file sbb:
README.txt
COPYRIGHT.html Copyright information
local_policy.jar Unlimited strength local policy file
US_export_policy.jar Unlimited strength US export policy file
3.Menginstall the unlimited strength policy JAR files.
Standarlokasiuntuk JCE jurisdiction policy JAR files adalah:
/jre/lib/security [Unix]
jrelibsecurity [Win32]
Artinyainitergantungkepada environment Java andaapakahandamenjalankanaplikasi java menggunakan
JRE denganmenginstall JDK atauhanya JRE sajatanpamenginstall JDK.
Dalamkasus environment Java menginstalldengan JDK, makamungkinakansepertiberikut
/home/user1/jdk1.6.0/jre [Unix]
C:jdk1.6.0jre [Win32]
Dalamkasus environment Java hanya JRE sajatanpamenginstall JDK, makamungkinakansepertiberikut
/home/user1/jre1.6.0 [Unix]
C:jre1.6.0 [Win32]
Dalamkasussayamakalokasiuntuk JCE adalah (JRE denganmenginstall JDK)
C:Program FilesJavajdk1.7.0_11jrelibsecurity [Win32]
4. Copy local_policy.jar dan US_export_policy.jar ke C:Program FilesJavajdk1.7.0_11jrelibsecurity
(ini environment Java di laptop saya). Catatan, kemungkinan file tersebutsudahada di direktoritersebut,
sehinggaandaharusmenimpasaja file tersebutdengan yang didownloadtadi.Jikalebihamannyamaka file
yang sudahadatadibisa di-rename terlebihdahulu.
5. Restart komputerandauntukmenyingkirkan exception yang terjadisebelummemasang file jar JCE yang
barutersebut.
III.ProgamKriptografi
a. Program Kriptografi DES
 Source Code
packageorg.wikijava.crypto;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.security.InvalidKeyException;
importjava.security.Key;
importjava.security.NoSuchAlgorithmException;
importjava.security.SecureRandom;
importjavax.crypto.BadPaddingException;
importjavax.crypto.Cipher;
importjavax.crypto.IllegalBlockSizeException;
importjavax.crypto.KeyGenerator;
importjavax.crypto.NoSuchPaddingException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
*
* @author Giulio
*/
public class CryptoMessage {
private Key key;
/**
* Generates the encryption key. using "des" algorithm
*
* @throws NoSuchAlgorithmException
*/
private void generateKey() throws NoSuchAlgorithmException {
KeyGenerator generator;
generator = KeyGenerator.getInstance("DES");
generator.init(new SecureRandom());
key = generator.generateKey();
}
private String encrypt(String message) throws IllegalBlockSizeException,
BadPaddingException, NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException,
UnsupportedEncodingException {
// Get a cipher object.
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
// Gets the raw bytes to encrypt, UTF8 is needed for
// having a standard character set
byte[] stringBytes = message.getBytes("UTF8");
// encrypt using the cypher
byte[] raw = cipher.doFinal(stringBytes);
// converts to base64 for easier display.
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(raw);
return base64;
}
private String decrypt(String encrypted) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException, IOException {
// Get a cipher object.
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
//decode the BASE64 coded message
BASE64Decoder decoder = new BASE64Decoder();
byte[] raw = decoder.decodeBuffer(encrypted);
//decode the message
byte[] stringBytes = cipher.doFinal(raw);
//converts the decoded message to a String
String clear = new String(stringBytes, "UTF8");
return clear;
}
publicCryptoMessage(String message) {
try {
System.out.println("clear message: " + message);
generateKey();
String encrypted = encrypt(message);
System.out.println("encrypted message: " + encrypted);
String decrypted = decrypt(encrypted);
System.out.println("decrypted message: " + decrypted);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @paramargs
*/
public static void main(String[] args) {
/* if (args.length == 1) {
newCryptoMessage(args[0]);
} else {
System.out.println("usage: ");
System.out.println("CryptoMessage [message]");
}
*/
newCryptoMessage("misbakhul_munir");
}
}
 Output
Argument diisidengankalimat yang nantinyajika di run, makaterenkripsi. Dan didekripsilagi.
b. Program Kriptografi AES
 Source Code
packageorg.wikijava.cryptography.generalExamples;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.security.InvalidAlgorithmParameterException;
importjava.security.InvalidKeyException;
importjava.security.NoSuchAlgorithmException;
importjavax.crypto.BadPaddingException;
importjavax.crypto.Cipher;
importjavax.crypto.IllegalBlockSizeException;
importjavax.crypto.NoSuchPaddingException;
importjavax.crypto.spec.IvParameterSpec;
importjavax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class CryptographyWithReusedPass {
private static String encrypt(String message, String skey, String ivx)
throwsUnsupportedEncodingException,
IllegalBlockSizeException, BadPaddingException {
SecretKeySpeckeySpec = new SecretKeySpec(skey.getBytes(), "AES");
IvParameterSpecivSpec = new IvParameterSpec(ivx.getBytes());
Cipher cipher = getCypher(keySpec, ivSpec, Cipher.ENCRYPT_MODE);
// Gets the raw bytes to encrypt, UTF8 is needed for
// having a standard character set
byte[] stringBytes;
stringBytes = message.getBytes("UTF8");
// encrypt using the cypher
byte[] raw;
//try {
raw = cipher.doFinal(stringBytes);
//} catch (IllegalBlockSizeException e) {
// throw new CryptographyException(e);
//} catch (BadPaddingException e) {
// throw new CryptographyException(e);
//}
// converts to base64 for easier display.
BASE64Encoder encoder = new BASE64Encoder();
String base64 = encoder.encode(raw);
return base64;
}
public static String decrypt(String encrypted, String skey, String ivx) throws
IOException {
SecretKeySpeckeySpec = new SecretKeySpec(skey.getBytes(), "AES");
IvParameterSpecivSpec = new IvParameterSpec(ivx.getBytes());
Cipher cipher = getCypher(keySpec, ivSpec, Cipher.DECRYPT_MODE);
// decode the BASE64 coded message
BASE64Decoder decoder = new BASE64Decoder();
byte[] raw;
//try {
raw = decoder.decodeBuffer(encrypted);
//} catch (IOException e) {
// throw new CryptographyException("Reading error", e);
//}
// decode the message
byte[] stringBytes = null;
try {
stringBytes = cipher.doFinal(raw);
} catch (IllegalBlockSizeException e) {
// throw new CryptographyException("Encrypted message was
corrupted",
// e);
} catch (BadPaddingException e) {
// throw new CryptographyException("Encrypted message was
corrupted",
// e);
}
// converts the decoded message to a String
String clear;
//try {
clear = new String(stringBytes, "UTF8");
//} catch (UnsupportedEncodingException e) {
//throw new CryptographyException(e);
//}
return clear;
}
/**
* @paramkeySpec
* @paramivSpec
* @param mode
* @return
* @throws CryptographyException
*/
public static Cipher getCypher(SecretKeySpeckeySpec,
IvParameterSpecivSpec, int mode) {
// Get a cipher object.
Cipher cipher;
try {
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("invalid algorithm", e);
} catch (NoSuchPaddingException e) {
throw new RuntimeException("invalid padding", e);
}
try {
cipher.init(mode, keySpec, ivSpec);
} catch (InvalidKeyException e) {
// throw new CryptographyException("invalid key", e);
} catch (InvalidAlgorithmParameterException e) {
throw new RuntimeException("invalid algorithm parameter.", e);
}
return cipher;
}
/**
*
* @paramargs
*/
public static void main(String[] args) throws UnsupportedEncodingException,
IllegalBlockSizeException, BadPaddingException, IOException {
String message="misbakhul_munir";
String key="1011199102112008";
String ivx="1502199202112008";
//if (args.length == 3) {
// message = args[0];
// key = args[1];
// ivx = args[2];
//} else {
// System.out.println("usage: ");
// System.out
// .println("CryptographyWithReusedPass [message]
[skey] [ivx]n key and ivx must have length 16 ");
// return;
//}
System.out.println("clear message: " + message);
String encrypted;
//try {
encrypted = encrypt(message, key, ivx);
//} catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// return;
//} catch (CryptographyException e) {
// e.printStackTrace();
// return;
//}
System.out.println("encrypted message: " + encrypted);
String decrypted;
//try {
decrypted = decrypt(encrypted, key, ivx);
//} catch (CryptographyException e) {
// e.printStackTrace();
// return;
//}
System.out.println("decrypted message: " + decrypted);
}
}
 Output
Argument harusdiisidengan value1,value2& value3 (dengan length 16).
Java kriptografi

Contenu connexe

Similaire à Java kriptografi

Java ppt
Java pptJava ppt
Java ppt044249
 
Pengantar dasar-pemrograman-java
Pengantar dasar-pemrograman-java  Pengantar dasar-pemrograman-java
Pengantar dasar-pemrograman-java Internet Explorer
 
Network Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman JavaNetwork Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman JavaLia Rusdyana Dewi
 
Pengantar Pemrograman Java
Pengantar Pemrograman JavaPengantar Pemrograman Java
Pengantar Pemrograman Javadaffa12
 
Modul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekModul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekimam arifin
 
Perangkat dalam keamanan jaringan
Perangkat dalam keamanan jaringanPerangkat dalam keamanan jaringan
Perangkat dalam keamanan jaringanDita Tri Utami
 
16101048 nur adinda fauziah tugas 3
16101048 nur adinda fauziah tugas 316101048 nur adinda fauziah tugas 3
16101048 nur adinda fauziah tugas 3NurAdindaFauziah
 
Artikel 10105755
Artikel 10105755Artikel 10105755
Artikel 10105755Satya607
 
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
Ali - The Journey-Hack Electron App Desktop (MacOS).pdfAli - The Journey-Hack Electron App Desktop (MacOS).pdf
Ali - The Journey-Hack Electron App Desktop (MacOS).pdfidsecconf
 
Sistem_Operasi_Informatika_Thread_Kelompok B2.pptx
Sistem_Operasi_Informatika_Thread_Kelompok B2.pptxSistem_Operasi_Informatika_Thread_Kelompok B2.pptx
Sistem_Operasi_Informatika_Thread_Kelompok B2.pptx11211058
 
Struktur Pemrograman Java
Struktur Pemrograman JavaStruktur Pemrograman Java
Struktur Pemrograman Javaroji muhidin
 
Pemrograman java
Pemrograman javaPemrograman java
Pemrograman javaMutiara Ayu
 
Rangkuman tentang java
Rangkuman tentang javaRangkuman tentang java
Rangkuman tentang javaFitra Sani
 

Similaire à Java kriptografi (20)

Java ppt
Java pptJava ppt
Java ppt
 
Pengantar dasar-pemrograman-java
Pengantar dasar-pemrograman-java  Pengantar dasar-pemrograman-java
Pengantar dasar-pemrograman-java
 
Network Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman JavaNetwork Programming 2 - Dasar Pemrograman Java
Network Programming 2 - Dasar Pemrograman Java
 
Pengantar Pemrograman Java
Pengantar Pemrograman JavaPengantar Pemrograman Java
Pengantar Pemrograman Java
 
Modul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekModul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objek
 
Perangkat dalam keamanan jaringan
Perangkat dalam keamanan jaringanPerangkat dalam keamanan jaringan
Perangkat dalam keamanan jaringan
 
16101048 nur adinda fauziah tugas 3
16101048 nur adinda fauziah tugas 316101048 nur adinda fauziah tugas 3
16101048 nur adinda fauziah tugas 3
 
Artikel 10105755
Artikel 10105755Artikel 10105755
Artikel 10105755
 
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
Ali - The Journey-Hack Electron App Desktop (MacOS).pdfAli - The Journey-Hack Electron App Desktop (MacOS).pdf
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
 
Pengenalan java
Pengenalan javaPengenalan java
Pengenalan java
 
Materi tentang j2me
Materi tentang j2meMateri tentang j2me
Materi tentang j2me
 
2. prosedur pbo
2. prosedur pbo2. prosedur pbo
2. prosedur pbo
 
Sistem_Operasi_Informatika_Thread_Kelompok B2.pptx
Sistem_Operasi_Informatika_Thread_Kelompok B2.pptxSistem_Operasi_Informatika_Thread_Kelompok B2.pptx
Sistem_Operasi_Informatika_Thread_Kelompok B2.pptx
 
Struktur Pemrograman Java
Struktur Pemrograman JavaStruktur Pemrograman Java
Struktur Pemrograman Java
 
Pemrograman java
Pemrograman javaPemrograman java
Pemrograman java
 
JAVA
JAVAJAVA
JAVA
 
PPT JAVA
PPT JAVAPPT JAVA
PPT JAVA
 
java
javajava
java
 
Rangkuman tentang java
Rangkuman tentang javaRangkuman tentang java
Rangkuman tentang java
 
Java ppt
Java pptJava ppt
Java ppt
 

Java kriptografi

  • 1. MAKALAH JAVA CRYPTOGRAPHIC EXTENSION KEAMANAN DATA M.MISBAKHUL MUNIR 7410040048 3 D4 TI B Politeknik Elektronika Negeri Surabaya (PENS) 2013
  • 2. JAVA CRYPTOGRAPHIC EXTENSION (JCE) I. Pendahuluan API yang pertamaadalahJCA (Java Cryptography Architecture), merupakan framework sekuriti yang diintegrasikanbersamainti (core) dari Java API. JCA banyakdikeluhkanmenyediakankriptografi yang kurang 'kuat', dimanapanjangkuncikriptografi yang diperbolehkanhanyasampaimaksimum 128 atau 256 bit. Sudahbarangtentukuncikriptografi yang tidak 'kuat' ataupanjang bit kunci yang pendekmaka hacker yang memecahkankriptografitersebut (cipher) hanyamemerlukanwaktu yang tidakterlalu lama. Lokasi JCA terletakpadapaketjava.security. API yang keduaadalah JCE (Java Cryptography Extension), merupakan framework sekuritiekstensidari Java.Iamenyediakanekstensiuntukkriptografi yang kuat, diperbolehkanuntuk di- eksporolehpemerintah US setelahkebijakanmengenaieksportahun 2000. JCE mulaidiperbolehkansebagaiopsipakettambahanpada JDK v 1.2.x dan 1.3.x, sedangkanpada JDK v 1.4.x telahdiintegrasikan.API JCE diimplementasioleh Cryptographic Service Providers.Pada JDK v 1.4.x keatassecara default API service-provider nyaadalahSunJCE.Dengan JCE makamemberikeleluasaankepadakita (memprogram java kriptografi) untukmemakaiimplementasidari API service-provider yang diinginkan.Lokasi JCE terletakpadapaketjavax.crypto. Symmetric dan Asymmetric Cryptography merupakanjenisalgoritmakriptografiberdasarkanpenggunaankunci.Singkatnya, kriptografi symmetric menggunakankunci yang samauntukmelakukan proses enkripsidandekripsisedangkankriptografi asymmetric menggunakankunci yang berbedauntuk encrypt dan decrypt. Contohalgoritma symmetric adalah AES, DES, RC4 dllsedangkan asymmetric adalah RSA, Elgamaldll.Gambardibawahinimerupakan proses enkripsidandekripsialgoritma symmetric dan asymmetric. Symmetric Algorithm Asymmetric Algorithm
  • 3. Padaalgoritma asymmetric, terdapatduabuahkunciyaitukuncipublikuntuk encrypt dankunci private untuk decrypt. Ketikaseseorang (misal Alice) akanmengirimkanpesanke Bob, maka Alice akanmengenkripsipesantersebutmenggunakankuncipublik Bob dan Bob akanmembukapesan yang diterimanyamenggunakankunci private. Hal tersebutmerupakankelebihanpadasistem asymmetric karena user cukupmenyimpansecararahasiakunci private miliknya, sedangkankuncipublikdapatdisebarkankeseluruh user yang inginberkomunikasidengannyatanpaperlukhawatir orang yang tidakberhakdapatmembukapesanmenggunakankuncipublik yang telahdisebartersebut. Padasistem symmetric, kunci yang digunakanuntuk encrypt dan decrypt adalahsama, sehingga user yang salingberkomunikasimenggunakansistem symmetric harussalingberkirimkunci yang samakarenajikamerekatidakmenggunakankunci yang samamakapesantidakdapatterbuka di sisipenerima. Jikaterdapatseseorang yang berada di tengah2 proses kirimterimakuncidanberhasilmendapatkankuncitersebutmakamakasemuapesandapatterbuka. Berbedadengansistem asymmetric, user hanyaperlu mengirimkankuncipubliksupaya orang laindapatberkomunikasidengandirinya. User tidakperlutakutpenyerangdapatmerekonstruksi private key darikuncipublik yang didapatkannya. Kompleksitaspendistribusiankunci pada symmetric lebihtinggidibandingkandengan asymmetric. Setiapsatukuncipada symmetric digunakano lehdua user atausatugrupuntukberkomunikasi. Sayailustrasikansebagaiberikut, ketika user A akanberkomunikasidengan user B merekamenggunakankunci X danketika user A berkomunikasidengan user C merekaakanmenggunakankunci Y. Makaketika user B,C,D akanmengirimkanpesanke user A, user A akanmenggunakan 3 buahkunci yang berbedauntukmembukapesan yang diterima. Berbedadengansistem asymmetric,user B,C,D cukupmenggunakankuncipublik A untukmengirimkanpesandan A cukupmenggunakankunci private nyauntukmembukapesantersebut. Akan tetapi, sistem symmetric lebihcepatdalamkomputasidan ciphertext yang dihasilkanlebihsedikitsehinggatidakmembebanibandwithpadasaat proses pengirimanpesan. Biasanya symmetric dan asymmetric seringdigunakanbersamaanpadasuatusistem.Sebagaicontohpadasiste m video conference Agievic, asymmetric digunakanuntukpendistribusiankunci symmetric, kunci symmetric inidigunakanuntu kuntukmengenkripsikomunikasi video conference AES (Advance Encryption Standart) Advanced Encryption Standard (AES) merupakanalgoritmakriptografi simetrik yang dapatdigunkanuntukmengamakan data.Algoritma AESadalahblokchipertextsimetrik yang dapatmengenkripsi (encipher) dandekripsi (decipher) informasi. Enkripsimerubah data yang tidakdapatlagidibacadisebutciphertext.sebaliknyadekripsiadalahmerubahciphertext data menjadibentuksemula yang kitakenalsebagai plaintext. Algoritma AESmengunakankuncikriptografi 128, 192, dan 256 bits untukmengenkripdandekrip data padablok 128 bits. DES (Digital Encryption Standart) Secure random key. DES (Data Encryption Standard) adalahalgoritmacipher blok yang populerkarenadijadikan standard algoritmaenkripsikunci-simetri, meskipunsaatini standard tersebuttelahdigantikandenganalgoritma yang baru, AES, karenaDES sudahdianggaptidakamanlagi. SebenarnyaDES adalahnama standard enkripsisimetri, namaalgoritmaenkripsinyasendiriadalahDEA
  • 4. (Data Encryption Algorithm), namunnamaDES lebihpopulerdaripadaDEA. AlgoritmaDES dikembangkan di IBM dibawahkepemimpinan W.L. Tuchman padatahun 1972.AlgoritmainididasarkanpadaalgoritmaLucifer yang dibuatoleh Horst Feistel.AlgoritmainitelahdisetujuiolehNational Bureau of Standard (NBS) setelahpenilaiankekuatannyaolehNational Security Agency (NSA) AmerikaSerikat.DES termasukkedalamsistemkriptografisimetridantergolongjeniscipher blok. DES beroperasipadaukuranblok 64 bit. DES mengenkripsikan 64 bit plainteksmenjadi 64 bit cipherteksdenganmenggunakan 56 bit kunci internal (internal key) atauupa-kunci(subkey). Kunci internal dibangkitkandarikuncieksternal(external key) yang panjangnya 64 bit. II.Menginstall JCE Berikutiniadalahcaramenginstall JCE ke JDK API kita. 1. Download Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files disiniuntuk yang menggunakan JDK 7. Jikamenggunakan JDK selainitubisadisesuaikan. 2. Uncompressdanekstrak file yang didownloadtadi. Iniakanmembuatsubdirektori JCE. Didalamdirektoritersebutakanterdapat file sbb: README.txt COPYRIGHT.html Copyright information local_policy.jar Unlimited strength local policy file US_export_policy.jar Unlimited strength US export policy file 3.Menginstall the unlimited strength policy JAR files. Standarlokasiuntuk JCE jurisdiction policy JAR files adalah: /jre/lib/security [Unix] jrelibsecurity [Win32] Artinyainitergantungkepada environment Java andaapakahandamenjalankanaplikasi java menggunakan JRE denganmenginstall JDK atauhanya JRE sajatanpamenginstall JDK. Dalamkasus environment Java menginstalldengan JDK, makamungkinakansepertiberikut /home/user1/jdk1.6.0/jre [Unix] C:jdk1.6.0jre [Win32] Dalamkasus environment Java hanya JRE sajatanpamenginstall JDK, makamungkinakansepertiberikut /home/user1/jre1.6.0 [Unix] C:jre1.6.0 [Win32] Dalamkasussayamakalokasiuntuk JCE adalah (JRE denganmenginstall JDK)
  • 5. C:Program FilesJavajdk1.7.0_11jrelibsecurity [Win32] 4. Copy local_policy.jar dan US_export_policy.jar ke C:Program FilesJavajdk1.7.0_11jrelibsecurity (ini environment Java di laptop saya). Catatan, kemungkinan file tersebutsudahada di direktoritersebut, sehinggaandaharusmenimpasaja file tersebutdengan yang didownloadtadi.Jikalebihamannyamaka file yang sudahadatadibisa di-rename terlebihdahulu. 5. Restart komputerandauntukmenyingkirkan exception yang terjadisebelummemasang file jar JCE yang barutersebut. III.ProgamKriptografi a. Program Kriptografi DES  Source Code packageorg.wikijava.crypto; importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importjava.security.Key; importjava.security.NoSuchAlgorithmException; importjava.security.SecureRandom; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.KeyGenerator; importjavax.crypto.NoSuchPaddingException; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * * @author Giulio */ public class CryptoMessage { private Key key; /**
  • 6. * Generates the encryption key. using "des" algorithm * * @throws NoSuchAlgorithmException */ private void generateKey() throws NoSuchAlgorithmException { KeyGenerator generator; generator = KeyGenerator.getInstance("DES"); generator.init(new SecureRandom()); key = generator.generateKey(); } private String encrypt(String message) throws IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException { // Get a cipher object. Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); // Gets the raw bytes to encrypt, UTF8 is needed for // having a standard character set byte[] stringBytes = message.getBytes("UTF8"); // encrypt using the cypher byte[] raw = cipher.doFinal(stringBytes); // converts to base64 for easier display. BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); return base64; } private String decrypt(String encrypted) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, IOException { // Get a cipher object. Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); //decode the BASE64 coded message BASE64Decoder decoder = new BASE64Decoder();
  • 7. byte[] raw = decoder.decodeBuffer(encrypted); //decode the message byte[] stringBytes = cipher.doFinal(raw); //converts the decoded message to a String String clear = new String(stringBytes, "UTF8"); return clear; } publicCryptoMessage(String message) { try { System.out.println("clear message: " + message); generateKey(); String encrypted = encrypt(message); System.out.println("encrypted message: " + encrypted); String decrypted = decrypt(encrypted); System.out.println("decrypted message: " + decrypted); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * * @paramargs */
  • 8. public static void main(String[] args) { /* if (args.length == 1) { newCryptoMessage(args[0]); } else { System.out.println("usage: "); System.out.println("CryptoMessage [message]"); } */ newCryptoMessage("misbakhul_munir"); } }  Output Argument diisidengankalimat yang nantinyajika di run, makaterenkripsi. Dan didekripsilagi.
  • 9. b. Program Kriptografi AES  Source Code packageorg.wikijava.cryptography.generalExamples; importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.security.InvalidAlgorithmParameterException; importjava.security.InvalidKeyException; importjava.security.NoSuchAlgorithmException; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.NoSuchPaddingException; importjavax.crypto.spec.IvParameterSpec; importjavax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class CryptographyWithReusedPass { private static String encrypt(String message, String skey, String ivx) throwsUnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException { SecretKeySpeckeySpec = new SecretKeySpec(skey.getBytes(), "AES"); IvParameterSpecivSpec = new IvParameterSpec(ivx.getBytes()); Cipher cipher = getCypher(keySpec, ivSpec, Cipher.ENCRYPT_MODE);
  • 10. // Gets the raw bytes to encrypt, UTF8 is needed for // having a standard character set byte[] stringBytes; stringBytes = message.getBytes("UTF8"); // encrypt using the cypher byte[] raw; //try { raw = cipher.doFinal(stringBytes); //} catch (IllegalBlockSizeException e) { // throw new CryptographyException(e); //} catch (BadPaddingException e) { // throw new CryptographyException(e); //} // converts to base64 for easier display. BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); return base64; } public static String decrypt(String encrypted, String skey, String ivx) throws IOException { SecretKeySpeckeySpec = new SecretKeySpec(skey.getBytes(), "AES"); IvParameterSpecivSpec = new IvParameterSpec(ivx.getBytes()); Cipher cipher = getCypher(keySpec, ivSpec, Cipher.DECRYPT_MODE); // decode the BASE64 coded message BASE64Decoder decoder = new BASE64Decoder(); byte[] raw; //try { raw = decoder.decodeBuffer(encrypted); //} catch (IOException e) { // throw new CryptographyException("Reading error", e); //} // decode the message byte[] stringBytes = null;
  • 11. try { stringBytes = cipher.doFinal(raw); } catch (IllegalBlockSizeException e) { // throw new CryptographyException("Encrypted message was corrupted", // e); } catch (BadPaddingException e) { // throw new CryptographyException("Encrypted message was corrupted", // e); } // converts the decoded message to a String String clear; //try { clear = new String(stringBytes, "UTF8"); //} catch (UnsupportedEncodingException e) { //throw new CryptographyException(e); //} return clear; } /** * @paramkeySpec * @paramivSpec * @param mode * @return * @throws CryptographyException */ public static Cipher getCypher(SecretKeySpeckeySpec, IvParameterSpecivSpec, int mode) { // Get a cipher object. Cipher cipher; try { cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("invalid algorithm", e); } catch (NoSuchPaddingException e) { throw new RuntimeException("invalid padding", e); } try { cipher.init(mode, keySpec, ivSpec); } catch (InvalidKeyException e) {
  • 12. // throw new CryptographyException("invalid key", e); } catch (InvalidAlgorithmParameterException e) { throw new RuntimeException("invalid algorithm parameter.", e); } return cipher; } /** * * @paramargs */ public static void main(String[] args) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, IOException { String message="misbakhul_munir"; String key="1011199102112008"; String ivx="1502199202112008"; //if (args.length == 3) { // message = args[0]; // key = args[1]; // ivx = args[2]; //} else { // System.out.println("usage: "); // System.out // .println("CryptographyWithReusedPass [message] [skey] [ivx]n key and ivx must have length 16 "); // return; //} System.out.println("clear message: " + message); String encrypted; //try { encrypted = encrypt(message, key, ivx); //} catch (UnsupportedEncodingException e) { // e.printStackTrace(); // return; //} catch (CryptographyException e) { // e.printStackTrace(); // return; //} System.out.println("encrypted message: " + encrypted); String decrypted;
  • 13. //try { decrypted = decrypt(encrypted, key, ivx); //} catch (CryptographyException e) { // e.printStackTrace(); // return; //} System.out.println("decrypted message: " + decrypted); } }  Output Argument harusdiisidengan value1,value2& value3 (dengan length 16).