Selasa, 13 Maret 2012

Enkripsi Deskripsi Java

 Kriptografi, secara umum adalah ilmu dan seni untuk menjaga kerahasiaan berita. Selain pengertian tersebut terdapat pula pengertian ilmu yang mempelajari teknik-teknik matematika yang berhubungan dengan aspek keamanan informasi seperti kerahasiaan data, keabsahan data,integritas data, serta autentikasi data. 


Tidak semua aspek keamanan informasiditangani oleh kriptografi.Ada empat tujuan mendasar dari ilmu kriptografi ini yang juga merupakan aspek keamanan informasi yaitu :


1. Kerahasiaan, adalah layanan yang digunakan untuk menjaga isi dariinformasi dari siapapun kecuali yang memiliki otoritas atau kunci rahasiauntuk membuka/mengupas informasi yang telah disandi.


2. Integritas data, adalah berhubungan dengan penjagaan dari perubahandata secara tidak sah. Untuk menjaga integritas data, sistem harusmemiliki kemampuan untuk mendeteksi manipulasi data oleh pihak- pihak yang tidak berhak, antara lain penyisipan, penghapusan, dan pensubsitusian data lain kedalam data yang sebenarnya


3. Autentikasi, adalah berhubungan dengan identifikasi/pengenalan, baik secara kesatuan sistem maupun informasi itu sendiri. Dua pihak yangsaling berkomunikasi harus saling memperkenalkan diri. Informasi yangdikirimkan melalui kanal harus diautentikasi keaslian, isi datanya, waktu pengiriman, dan lain-lain.


4. Non-repudiasi., atau nirpenyangkalan adalah usaha untuk mencegahterjadinya penyangkalan terhadap pengiriman/terciptanya suatu informasioleh yang mengirimkan/membuat.


  • Enkripsi dapat digunakan untuk tujuan keamanan , tetapi teknik lain masih diperlukan untuk membuat komunikasi yang aman , terutama untuk memastikan integritas dan autentukasi dari sebuah pesan .
  • Enkripsi adalah sebuah proses data encoding atau pemecahan kode data yang hanya dapat dibaca bila kita memiliki sebuah kunci khusus. Dulu enkripsi hanya berkembang di dunia spionase / perang, tetapi saat ini teknologi tersebut telah merambah ke sektor bisnis dan kalangan pengguna rumahan: Enkripsi adalah tool terbaik untuk melindungi data, privasi, dan rahasia Anda.

Ada 2 jenis enkripsi :



1. Simetris

Dengan enkripsi simetris, Anda menjalankan sebuah file melalui program dan membuat sebuah kunci yang mengacak file. Kemudian Anda mengirim file terenkripsi melalui e-mail ke si penerima dan secara terpisah mentransmit kunci dekodingnya (mungkin berupa sebuah password atau file data lainnya). Si penerima, dengan menjalankan aplikasi enkripsi yang sama, menggunakan kunci yang Anda berikan untuk menyatukan kembali file yang telah diacak. Enkripsi simetris sangat mudah dan sangat cepat dalam penggunaannya, tetapi tidak seaman enkripsi asimetris, karena seseorang dapat saja mencegat kunci dan mendekoding pesan tersebut. Tetapi karena kecepatannya itu, saat ini enkripsi simetris banyak digunakan pada transaksi e-commerce.

2. Asimetris (juga disebut sebagai public key).

Enkripsi asimetris sangat kompleks–tetapi jauh lebih aman. Diperlukan dua buah kunci yang saling berhubungan: sebuah kunci publik dan sebuah kunci pribadi. Anda membuat kunci publik anda tersedia bagi siapa saja yang ingin anda kirim informasi terenkripsi. Kunci tersebut hanya dapat mengenkoding data, ia tidak dapat mendekodingnya. Kunci pribadi anda terjaga dengan aman. Saat orang-orang hendak mengirim informasi terenkripsi pada anda, mereka mengenkripsinya menggunakan kunci publik anda. Saat anda menerima chipertext tersebut, anda akan mendekripsikannya dengan menggunakan kunci pribadi anda. Enkripsi asimetris menambahkan tingkat keamanan pada data anda, tetapi akibatnya lebih banyak lagi waktu komputasi yang dibutuhkan, sehingga prosesnya menjadi sangat panjang dan lebih lama.



 Aplikasi kriptografi simetrik RC4 menggunakan Java :
Nama file : RC4Engine.java

class KeyParameter
{
 private byte[ ] key;
 public KeyParameter(byte[] key)
{
this(key,0,key.length);
}
 public KeyParameter (byte[] key,int keyoff,int keyLen)
{
this.key = new byte[keyLen];
System.arraycopy(key,keyoff,this.key,0,keyLen);
}
 public byte[] getKey()
{

return key;
}
}
class EncRC4Engine{
 private final static int STATE_LENGTH = 256;
 private byte[] engineState = null,workingKey = null; private int x=0,y=0; private static final char[] kDigits =
{
’0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’a',’b',’c',’d',’e',’f'
};
EncRC4Engine()
{
}
//constructor  public void init(boolean forEncryption,KeyParameter params)
{
if(params instanceof KeyParameter)
{
workingKey = ((KeyParameter)params).getKey();
setKey(workingKey);
return;
}
throw new IllegalArgumentException(”invalid parameter passed to C4init”+params.getClass().getName());
public void processBytes(byte[] in,int inOff,int len,byte[] out,int outOff)
{

if((inOff+len)>in.length)
{
throw new RuntimeException(”output buffer too short”);
}
if((outOff+len)>out.length){throw new RuntimeException(”out put buffer too short”);
}
for (int i = 0 ; i < len ; i++)
{
x = (x+1) & 0xff;
y = ( engineState[x] + y ) & 0xff;
//swap byte tmp = engineState[x];engineState[x] = engineState[y];engineState[y] = tmp;
//xor out[i + outOff] = (byte)(in[i+inOff] ^ engineState[(engineState[x] +engineState[y]) & 0xff]);
}
}
 public String bytesToHex(byte[] raw)
{
int length = raw.length;
char[]hex = new char[length*2];
for (int i=0;i<length;i++)
{

int value = (raw[i]+256) % 256;
int highIndex = value >> 4;
int lowIndex = value & 0×0f;
hex[i*2+0] = kDigits[highIndex];
hex[i*2+1] = kDigits[lowIndex];
}
return (new String(hex)).toString();
}
 public void reset(){setKey(workingKey);
}
//private implementation private void setKey(byte[] keyBytes)
{
workingKey = keyBytes;
x=0;
y=0;
if (engineState == null)
{
engineState = new byte [STATE_LENGTH];
}
//reset the state of the enginefor(int i = 0;i < STATE_LENGTH;i++)
{
engineState[i]=(byte)i;
 }
int i1=0;
int i2=0;
for(int i=0;i < STATE_LENGTH;i++)
{
i2 = ((keyBytes[i1] & 0xff) + engineState[i]+ i2) & 0xff;
//do the byte swap inline byte tmp = engineState[i];
engineState[i]=engineState[i2]
;engineState[i2]=tmp;
i1=(i1+1) 
% keyBytes.length;
}
}
}

Tidak ada komentar:

Posting Komentar