Rabu, 20 November 2013

Test link download file

Test link download file di blogspot

klik disini untuk download file kontrak kuliah APBO
klik disini untuk download file kontrak kuliah PBO

Senin, 04 Maret 2013

Menggunakan Java Cryptographic Extension (JCE)

Jika anda menggunakan fitur kriptografi dalam Java maka Java menyediakan fungsionalitas kriptografi menggunakan dua API (Application Programming Interface), yaitu :

1. API yang pertama adalah JCA (Java Cryptography Architecture), merupakan framework sekuriti yang diintegrasikan bersama inti (core) dari Java API. JCA banyak dikeluhkan menyediakan kriptografi yang kurang 'kuat', dimana panjang kunci kriptografi yang diperbolehkan hanya sampai maksimum 128 atau 256 bit. Sudah barang tentu kunci kriptografi yang tidak 'kuat' atau panjang bit kunci yang pendek maka hacker yang memecahkan kriptografi tersebut (cipher) hanya memerlukan waktu yang tidak terlalu lama. Lokasi JCA terletak pada paket java.security.

2. Api yang kedua adalah JCE (Java Cryptography Extension), merupakan framework sekuriti ekstensi dari Java. Ia menyediakan ekstensi untuk kriptografi yang kuat, diperbolehkan untuk di-ekspor oleh pemerintah US setelah kebijakan mengenai ekspor tahun 2000. JCE mulai diperbolehkan sebagai opsi paket tambahan pada JDK v 1.2.x dan 1.3.x, sedangkan pada JDK v 1.4.x telah diintegrasikan. API JCE diimplementasi oleh Cryptographic Service Providers. Pada JDK v 1.4.x keatas secara default API service-provider nya adalah SunJCE. Dengan JCE maka memberi keleluasaan kepada kita (memprogram java kriptografi) untuk memakai implementasi dari API service-provider yang diinginkan. Lokasi JCE terletak pada paket javax.crypto.


Menginstall JCE

Berikut ini adalah cara menginstall JCE ke JDK API kita.

1. Download Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
 disini untuk yang menggunakan JDK 7. Jika menggunakan JDK selain itu bisa disesuaikan.


2. Uncompress dan ekstrak file yang didownload tadi. Ini akan membuat subdirektori JCE. Didalam direktori tersebut akan terdapat 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.
Standar lokasi untuk  JCE jurisdiction policy JAR files adalah:
/jre/lib/security [Unix]
\jre\lib\security [Win32]
Artinya ini tergantung kepada environment Java anda apakah anda menjalankan aplikasi java menggunakan JRE dengan menginstall JDK atau hanya JRE saja tanpa menginstall JDK.
Dalam kasus environment Java menginstall dengan JDK, maka mungkin akan seperti berikut
/home/user1/jdk1.6.0/jre [Unix]
C:\jdk1.6.0\jre [Win32]

Dalam kasus environment Java hanya JRE saja tanpa menginstall JDK, maka mungkin akan seperti berikut
/home/user1/jre1.6.0 [Unix]
C:\jre1.6.0 [Win32]

Dalam kasus saya maka lokasi untuk JCE adalah (JRE dengan menginstall JDK)
C:\Program Files\Java\jdk1.7.0_11\jre\lib\security [Win32]

4. Copy local_policy.jar dan US_export_policy.jar ke C:\Program Files\Java\jdk1.7.0_11\jre\lib\security (ini  environment Java di laptop saya). Catatan, kemungkinan file tersebut sudah ada di direktori tersebut, sehingga anda harus menimpa saja file tersebut dengan yang didownload tadi. Jika lebih amannya maka file yang sudah ada tadi bisa di-rename terlebih dahulu.

5. Restart komputer anda untuk menyingkirkan exception yang terjadi sebelum memasang file jar JCE yang baru tersebut.

Mencoba JCE dengan membuat Program Java kriptografi

Berikut ini contoh programnya. Silahkan anda ketik di editor favorit anda dan jalankan. Dalam hal ini saya menggunakan IDE Netbeans.

/*
 * Sebuah contoh sederhana dari enkripsi dan dekripsi sebuah text
 * menggunakan enkripsi Data Encryption Standard (DES).
 */
package org.aryo.security;

/**
 *
 * @author Aryo
 */
import javax.crypto.*;
import sun.misc.BASE64Encoder;

public class SimpleEncrypt {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        // pertama, buat kunci enkripsi...
        System.out.println("Generating key");
        KeyGenerator keygen = KeyGenerator.getInstance("DES");
        SecretKey secretKey = keygen.generateKey();

        //sekarang, buat obyek cipher dengan parameter2 yang sesuai...
        System.out.println("Meng-enkripsi menggunakan DES");
        Cipher desCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        desCipher.init(Cipher.ENCRYPT_MODE, secretKey);

        //sekarang, bentuk plaintext untuk di-enkripsi...
        byte[] plaintext = "Dosen ISTN adalah yang terbaik".getBytes();
        System.out.println("Plaintext adalah \'" + new String(plaintext).toString() + "\'");

        //sekarang, lakukan enkripsi...
        byte[] ciphertext = desCipher.doFinal(plaintext);

        //tampilkan hasilnya...
        String strCiphertext = new BASE64Encoder().encode(ciphertext);
        System.out.println("Ciphertext menggunakan DES dgn CBC mode dan PKCS5 Padding adalah \'" + strCiphertext + "\'");

        //sekarang, mari buktikan bahwa enkripsi berjalan dengan mendekripsi menggunakan kunci yang sama...
        System.out.println("Men-dekripsi ciphertext");
        desCipher.init(Cipher.DECRYPT_MODE, secretKey, desCipher.getParameters());
        byte[] decrypttext = desCipher.doFinal(ciphertext);
        String strDecrypttext = new String(decrypttext);
        System.out.println("Dekrip text adalah \'" + strDecrypttext + "\'");

        //sekarang, dekrip ciphertext dan tampilkan hasilnya...
        plaintext = desCipher.doFinal(ciphertext);
        System.out.println("Plaintext adalah \'" + new String(plaintext).toString() + "\'");
    }
}


Berikut ini adalah contoh program lainnya
/*
 * Sebuah contoh sederhana dari enkripsi dan dekripsi sebuah text
 * menggunakan enkripsi Advanced Encryption Standard (AES).
 */
package org.aryo.security;

/**
 *
 * @author Aryo This program provides the functionality for Generating a Secure
 * Random Number.
 *
 * There are 2 ways to generate a Random number through SecureRandom. 1. By
 * calling nextBytes method to generate Random Bytes 2. Using setSeed(byte[]) to
 * reseed a Random object
 */
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import sun.misc.BASE64Encoder;

public class AESexample {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String strDataToEncrypt = new String();
        String strCipherText = new String();
        String strDecryptedText = new String();
        
        try {
            /**
             * Step 1. Generate an AES key using KeyGenerator Initialize the
             * keysize to 128
             *
             */
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            keyGen.init(128);
            SecretKey secretKey = keyGen.generateKey();

            /**
             * Step2. Create a Cipher by specifying the following parameters a.
             * Algorithm name - here it is AES
             */
            Cipher aesCipher = Cipher.getInstance("AES");

            /**
             * Step 3. Initialize the Cipher for Encryption
             */
            aesCipher.init(Cipher.ENCRYPT_MODE, secretKey);

            /**
             * Step 4. Encrypt the Data 1. Declare / Initialize the Data. Here
             * the data is of type String 2. Convert the Input Text to Bytes 3.
             * Encrypt the bytes using doFinal method
             */
            strDataToEncrypt = "Hello World of Encryption using AES ";
            byte[] byteDataToEncrypt = strDataToEncrypt.getBytes();
            byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt);
            strCipherText = new BASE64Encoder().encode(byteCipherText);
            System.out.println("Cipher Text generated using AES is " + strCipherText);

            /**
             * Step 5. Decrypt the Data 1. Initialize the Cipher for Decryption
             * 2. Decrypt the cipher bytes using doFinal method
             */
            aesCipher.init(Cipher.DECRYPT_MODE, secretKey, aesCipher.getParameters());
            byte[] byteDecryptedText = aesCipher.doFinal(byteCipherText);
            strDecryptedText = new String(byteDecryptedText);
            System.out.println(" Decrypted Text message is " + strDecryptedText);
        } catch (NoSuchAlgorithmException noSuchAlgo) {
            System.out.println(" No Such Algorithm exists " + noSuchAlgo);
        } catch (NoSuchPaddingException noSuchPad) {
            System.out.println(" No Such Padding exists " + noSuchPad);
        } catch (InvalidKeyException invalidKey) {
            System.out.println(" Invalid Key " + invalidKey);
        } catch (BadPaddingException badPadding) {
            System.out.println(" Bad Padding " + badPadding);
        } catch (IllegalBlockSizeException illegalBlockSize) {
            System.out.println(" Illegal Block Size " + illegalBlockSize);
        } catch (InvalidAlgorithmParameterException invalidParam) {
            System.out.println(" Invalid Parameter " + invalidParam);
        }
    }
}

Jika anda ingin mengetahui seberapa besar panjang kunci kriptografi pada sebuah algoritma (dalam program dibawah adalah algoritma AES) di JCE maka anda dapat mengeksekusi program berikut ini
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.aryo.security;

import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;

/**
 *
 * @author Aryo
 */
public class MeasureKeyLenCrypto {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws NoSuchAlgorithmException {
        int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
        System.out.println("Maksimum panjang kunci: " + maxKeyLen);
    }
}


Sampai disini dulu mengenai kriptografi JCE, semoga bermanfaat. Tunggu tulisan saya berikutnya.
Salam

Sumber:
- https://www.owasp.org/index.php/Using_the_Java_Cryptographic_Extensions
- http://www.developer.com/java/other/article.php/3778011/Unlocking-the-Secrets-of-Java-Cryptography-Extensions-The-Basics.htm
- https://www/oracle.com.