Tutorial Pemrograman Kriptografi C++ dan Java

Zae
(Sumber : Buku Kriptografi,Rinaldi Munir)
Protokol: aturan yang berisi rangkaian langkah-langkah, yang melibatkan dua atau lebih orang, yang dibuat untuk menyelesaikan suatu kegiatan.

Protokol kriptografi: protokol yang menggunakan kriptografi. Orang yang berpartisipasi dalam protokol kriptografi memerlukan protokol tersebut misalnya untuk:
- berbagi komponen rahasia untuk menghitung sebuah nilai,
- membangkitkan rangkaian bilangan acak,
- meyakinkan identitas orang lainnya (otentikasi),
- dll

• Protokol kriptografi dibangun dengan melibatkan beberapa algoritma kriptografi.

• Sebagian besar protokol kriptografi dirancang untuk dipakai oleh kelompok yang terdiri dari 2 orang pemakai, tetapi ada juga beberapa protokol yang dirancang untuk dipakai oleh kelompok yang terdiri dari lebih dari dua orang pemanaki (misalnya pada aplikasi teleconferencing)

• Untuk mendemonstrasikan protokol kriptografi, kita menggunakan nama-nama pemain sebagai berikut:

Alice : orang pertama (dalam semua protokol)
Bob : orang kedua (dalam semua protokol)
Carol : orang ketiga dalam protokol tiga- atau empat- orang
Dave : orang keempat dalam protokol empat-orang
Eve : penyadap (eavesdropper)
Trent : juru penengah (arbitrator) yang dipercaya

1.Protokol Komunikasi dengan Sistem Kriptografi Simetri.

Protokol 1:
(1) Alice dan Bob menyepakati algoritma kriptografi simetri yang akan digunakan.
(2) Alice dan Bob menyepakati kunci yang akan digunakan.
(3) Alice menulis pesan plainteks dan mengenkripsinya dengan kunci menjadi cipherteks.
(4) Alice mengirim pesan cipherteks kepada Bob.
(5) Bob mendekripsi pesan cipherteks dengan kunci yang sama dan membaca plainteksnya.

•Eve mendengar semua percakapan antara Alice dan Bob pada protokol ini.
-jika Eve menyadap transmisi pesan pada langkah (4), ia harus mencoba mengkriptanalisis cipherteks untuk memperoleh plainteks tanpa mengetahui kunci.
-jika ia mendengar pembicaraan pada langkah (1)dan (2), maka ia mengetahui algoritma dan kunci yang digunakan, sehingga ia dapat mendekripsi cipherteks dengan kunci tsb.

•Protokol kriptografi di atas tidak bagus karena kunci harus tetap rahasia sebelum, sepanjang, dan setelah protokol. Langkah (1) dapat dilakukan dalam mode publik, namun langkah (2) harus dilakukan dalam mode rahasia. Sistem kriptografi kunci-publik dapat memecahkan masalah distribusi kunci ini.

2.Protokol Komunikasi dengan Sistem Kriptografi Kunci-Publik.

Protokol 2:
(1)Alice dan Bob menyepakati algoritma kriptografi kunci-publik yang akan digunakan.
(2)Bob mengirimi Alice kunci publiknya (kunci publik Bob).
(3)Alice mengenkripsi pesannya dengan kunci publik Bob kemudian mengirimkannya ke Bob
(4)Bob mendekripsi pesan dari Alice dengan kunci rahasia miliknya (kunci rahasia Bob).

•Pada umumnya, pengguna di jaringan menyepakati algoritma kriptografi kunci-publik yang digunakan. Setiap pengguna jaringan mempunyai kunci publik dan kunci rahasia, yang dalam hal ini kunci publik dipublikasikan melalui basisdata yang dapat diakses bersama. Dengan demikian, protokol kriptografi kunci-publik menjadi lebih sederhana sebagai berikut:

Protokol 3:
(1)Alice mengambil kunci publik Bob dari basisdata kunci-publik.
(2)Alice mengenkripsi pesannya dengan kunci publik Bob kemudian mengirimkannya kepada Bob.
(3)Bob mendekripsi pesan dari Alice dengan kunci rahasia miliknya (kunci rahasia Bob).

•Eve yang mendengar pembicaraan selama protokol ini akan mendapatkan kunci publik Bob, tetapi Eve tidak dapat mendekripsi cipherteks karena ia tidak mengetahui kunci rahasia Bob.

•Dalam dunia nyata, sistem kriptografi kunci-publik bukanlah pengganti sistem kriptografi sismetri. Sistem kriptografi kunci-publik tidak digunakan untuk mengenkripsi pesan, melainkan untuk mengenkripsi kunci pada sistem kriptografi simetri.

•Dengan sistem kriptogfai kunci-publik, maka pertukaran kunci pada sistem kriptografi simetri dapat dilakukan dengan protokol kriptografi kunci-publik sebagai berikut:

Protokol 4:

(1)Bob mengirimi Alice kunci publiknya.
(2)Alice membangkitkan kunci simetri K, mengenkripsikannya dengan kunci publik (PK) Bob, dan mengirimkannya ke Bob,

EPK(K)

(3)Bob mendekripsi pesan dari Alice dengan menggunakan kunci rahasianya (SK) untuk mendapatkan kembali kunci simetri K,

DSK(EPK(K)) = K

(4)Baik Alice dan Bob dapat saling berkirim pesan dengan sistem kriptografi simetri dengan menggunakan kunci K.

•Dua gabungan sistem kriptografi yang digunakan pada protokol 4 di atas disebut hybrid cryptosystem dan kunci sismetri yang dipertukarkan disebut session key.

•Dengan protokol 4 di atas, kita katakan bahwa sistem kriptografi kunci-publik berhasil memecahkan masalah manajemen kunci yang sangat penting, yaitu pertukaran kunci.

3.Protokol untuk Sidik Dijital (Digital Signature)


a.Menandatangani Dokumen dengan Sistem Kriptografi Simetri dan Seorang Juru Penengah.

Alice ingin menandatangani dokumen digital (pesan atau arsip) dan mengirimkannya ke Bob. Ia meminta Trent sebagai juru penengah (misalnya pengacara) antara Alice dan Bob (diperlukan jika sewaktu-waktu ada pertengkaran antara Alice dan Bob). Trent akan memberikan sidik berupa sertifikasi terhadap dokumen yang dikirim oleh Alice. Sistem kriptografi yang digunakan adalah simetri. Trent memberikan kunci rahasia KA kepada Alice dan kunci rahasia KB kepada Bob (KA dan KB berbeda).

Protokol 5:
(1)Alice mengenkripsi dokumen dengan KA dan mengirimkannya kepada Trent.
(2)Trent mendekripsi dokumen dari Alice dengan KA.
(3)Trent menambahkan pada dokumen yang sudah didekripsi sebuah pernyataan sertifikasi bahwa dia telah menerima dokumen itu dari Alice, kemudian mengenkripsi keseluruhannya dengan KB.
(4)Trent mengirim cipherteks yang dihasilkan kepada Bob.
(5)Bob mendekripsi cipherteks dengan KB. Ia membaca dokumen dan sertifikasi dari Trent bahwa Alice yang mengirimkan dokumen tersebut.

•Karakteristik pemberian tanda tangan dengan prtotokol 5 adalah sbb:
1.Sidik (signature) pasti otentik, karena Trent adalah juru penegah yang dipercaya, Trent mengetahui bahwa dokumen dari Alice. Sertifikasi dari Trent berlaku sebagai bukti bagi Bob.
2.Sidik tidak dapat digunakan lagi untuk dokumen yang lain. Jika Bob menggunakan sertifikasi dari Trent untuk dokumen yang lain, maka kecurangan Bon ini dapat diketahui oleh Trent sbb:
-Trent meminta dokumen tersebut dari Bob.
-Trent mengenkripsi dokumen tersebut dengan KA dan membandingkannya dengan cipherteks dari Alice.
-Jika hasil enkripsi dokumen dari Bob tidak sama dengan cipherteks dari Alice, maka Bob telah mekakukan kecurangan.

3.Dokumen yang sudah ditandatangani tidak dapat diubah. Trent dapat membuktikan bahwa dokumen sudah berubah dengan cara yang sama seperti 2 di atas.
4.Sidik tidak dapat disangkal. Jika Alice menyangkal bahwa dia yang mengirim dokumen, sertifikasi dari Trent dapat menyanggah sangkalan Alice.


•Protokol 5 di atas tidak praktis karena membutuhkan pihak ketiga (Trent) untuk memberikan sertifikasi keabsahan dokumen dan prosesnya memakan waktu.


b. Menandatangani Dokumen dengan Sistem Kriptografi Kunci-Publik.

Protokol 6:
(1)Alice mengenkripsi dokumen dengan kunci rahasianya. Ini sekaligus juga berarti Alice telah memberikan sidik (signature) pada dokumennya.
(2)Alice mengirim dokumen yang terenkripsi kepada Bob.
(3)Bob mendekripsi dokumen dengan kunci publik Alice. Ini sekaligus juga berarti Bob telah memverifikasi sidik pada dokumen.

•Protokol 6 tidak membutuhkan pihak ketiga (Trent) untuk memberikan tandatangan (Trent hanya diperlukan untuk mensertifikasi bahwa kunci publik Alice memang benar milik Alice).

•Protokol 6 memiliki karakteristik yang sama seperti pada protokol 5.


c. Menandatangani Dokumen dengan Sistem Kriptografi Kunci-Publik dan Fungsi Hash Satu-Arah

Protokol 7:
(1)Alice meringkas dokumennya menjadi message digest dengan fungsi hash satu-arah.
(2)Alice mengenkripsi message digest dengan kunci rahasianya. Hasil enkripsinya disertakan (embedded) pada dokumen. Ini berarti Alice telah memberi sidik dijital pada dokumennya.
(3)Alice mengirim dokumen yang sudah diberi sidik dijital kepada Bob.
(4)Bob meringkas dokumen dari Alice menjadi mesaage digest dengan fungsi hash yang sama. Bob mendekripsi sidik dijital yang disertakan pada dokumen Alice. Jika hasil dekripsinya sama dengan message digest yang dihasilkan, maka sidik dijital tersebut sah.

.Jika dokumen yang sama ingin ditandatangani oleh dua orang (Alice dan Bob), maka orang ketiga, Carol, dibutuhkan pada proses verifikasi. Protokolnya adalah sebagai berikut:

Protokol 8:

(1)Alice memberi sidik dijital pada message digest dari dokumen.
(2)Bob memberi sidik dijital pada message digest dari dokumen.
(3)Bob mengirimkan sidik dijitalnya kepada Alice.
(4)Alice mengirim dokumen yang sudah diberi sidik dijitalnya dan sidik dijital dari Bob kepada Carol.
(5)Carol memverifikasi sidik dijital Alice dan sidik dijital Bob (Carol mengetahui kunci publik Alice dan kunci publik Bob).


4.Protokol untuk Sidik Dijital dengan Enkripsi


•Protokol ini dapat dianalogikan seperti pengiriman surat yang menggunakan amplop tertutup. Tanda tangan pada surat memberikan bukti kempemilikan, hal ini sama dengan fungsi sidik dijital pada pada dokumen elektrinis. Sedangkan amplop memberikan perlindungan keamanan (privacy), hal ini sama dengan fungsi enkripsi pada dokumen.

•Sidik dijital diberikan dengan menggunakan kunci rahasia pengirim (lihat protokol 6) dan dokumen dienkripsi dengan kunci publik penerima.

•Protokolnya adalah sbb:

Protokol 9:

(1)Alice menandatangi dokumen atau pesan (M) dengan menggunakan kunci rahasianya (SK-A).
SSK-A(M)
(2)Alice mengenkripsi dokumen yang sudah ditandatangi dengan kunci publik Bob (PK-B) dan mengirimkannya kepada Bob
EPK-B(SSK-A(M))
(3)Bob mendekripsi cipherteks yang diterima dengan kunci rahasianya (SK-B).
DSK-B(EPK-B(SSK-A(M))) = SSK-A(M))
(4)Bob melakukan verifikasi dengan mendekripsi hasil pada langkah 3 dengan menggunakan kunci publik Alice dan sekaligus mendapatkan kembali dokumen yang belum dienkripsi.
VPK-A( SSK-A(M)) = M

•Menandatangani dokumen sebelum mengenkripsikannya adalah cara yang alamiah. Dalam kehidupan sehari-hari, kita menulis surat, menandatanganinya, dan memasukkannya ke dalam amplop. Bila Alice memasukkan surat ke dalam amplop, kemudian menandatangani amplop, maka keabsahannya diragukan. Jika Bob memperlihatkan surat Alice tersebut kepada Carol, maka Carol mungkin menuduh Bob berbohong tentang isi surat tersebut.
•Alice tidak harus menggunakan menggunakan kunci publik/kunci rahasia yang sama untuk enkripsi dan tanda tangan. Alice dapat menggunakan dua pasang kunci: sepasang untuk enkripsi dan sepasang untuk pemberian tanda tangan.
•Misalkan Bob ingin mengkonfirmasi bahwa dia telah menerima dokumen dari Alice. Maka, Bob mengirimkan konfirmasi “tanda terima” kepada Alice. Protokol pengiriman pesan tanda terima adalah sebagai berikut:
Protokol 10:
(1)Alice menandatangi dokumen atau pesan (M) dengan menggunakan kunci rahasianya (SK-A), mengenkripsikannya dengan kunci publik Bob (PK-B) dan mengirimkannya kepada Bob
EPK-B(SSK-A(M))
(2)Bob mendekripsi cipherteks yang diterima dengan kunci rahasianya (SK-B), memverifikasi sidik dijital dengan kunci publik Alice dan sekaligus mendapatkan kembali dokumen yang belum dienkripsi.
VPK-A(DSK-B(EPK-B(SSK-A(M)))) = M
(3)Bob menandatangani dokumen (M) dengan kunci rahasianya (SK-B), mengenkripsikannya dengan kunci publik Alice (PK-A), dan mengirimkannya ke Alice.
EPK-A(SSK-B(M))
(4)Alice mendekripsi dokumen dengan kunci rahasianya (SK-A) dan memverifikasi sidik dijital dengan kunci publik Bob (PK-B).
VPK-B(DSK-A(EPK-A(SSK-B(M)))) = M ’
Jika M ’ yang dihasilkan sama dengan dokumen yang dikirim oleh Alice (M), maka Alice tahu bahwa Bob menerima dokumennya dengan benar.

tag : kriptografi,kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi
Zae
MOHON MAAF BELUM LENGKAP, MASIH DALAM PERBAIKAN
<<< TOPIK PEMBAHASAN >>>
TERMINOLOGI KRIPTOGRAFI
SEJARAH
* SCYTALE
* MESIN ENIGMA
KLASIFIKASI
* KRIPTOGRAFI KLASIK
@ SUBSTITUTION CIPHER
>> ROT13
>>> CESAR
@ TRANSPOSITION CIPHER
>>VIGINERE
@ CONCEALMENT CIPHER
* KRIPTOGRAFI MODERN
APPLIED CRYPTO & PROTOKOL
KRIPTANALISIS


tag : kriptografi,kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi, kriptografi
Zae
(Sumber Wikipedia)
Mesin Enigma adalah sebuah mesin penyandi yang digunakan untuk mengenkripsikan dan mendekripsikan pesan rahasia. Enigma dipatenkan oleh insinyur Jerman Arthur Scherbius, dan awalnya digunakan untuk tujuan komersial, namun nantinya terkenal karena digunakan oleh tentara dan pemerintah Jerman Nazi sebelum dan selama Perang Dunia II. Secara teknis, mesin Enigma termasuk keluarga mesin rotor elektromekanik, yang memiliki berbagai model. Nama Enigma diambil dari kata Latin aenigma, yang artinya teka-teki.
Versi Enigma yang paling terkenal adalah yang digunakan oleh Wehrmacht (tentara Jerman Nazi). Mesin ini, mulai digunakan oleh Nazi pada 1928, pada awalnya dianggap sebagai mesin kriptografi teraman di dunia, namun akhirnya dapat dipecahkan oleh pihak Sekutu, sehingga mesin ini justru merugikan pihak Nazi. Metode pemecahan (dekripsi) mesin ini pertama kali ditemukan di tahun 1932 oleh kriptografer Polandia dari Biuro Szyfrów (Kantor Sandi), Marian Rejewski, Jerzy Różycki dan Henryk Zygalski. Namun pada 1939 Jerman mendisain ulang Enigma sehingga metode tersebut tidak dapat digunakan lagi. Berkat informasi dari Polandia, akhirnya Britania dan Perancis berhasil membuat mesin pemecah Enigma baru ini, yang diberi nama bombe. Informasi yang didapat Sekutu dari pemecahan Enigma disebut ULTRA, yang terbukti amat penting bagi kemenangan Sekutu pada Perang Dunia II. Menurut para ahli, PD II berakhir dua tahun lebih cepat berkat pemecahan Enigma ini
Zae
Nah kemaren kan pake sandi klasik (sandi caesar), kalau dibawah nah ini lebih ke sandi modern..apa lagi tuch?? Cuma sekedar iseng aja sih..Kalau ini pake algoritma DES (tahu khan)..gunanya tuk enkrisi file biar gak ke baca oleh orang...


import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import javax.swing.JFormattedTextField;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.SecureRandom;import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.WindowConstants;
public class NewJFrame extends javax.swing.JFrame {
private JButton jButton1;
private JButton jButton2;
private JLabel jLabel2;
private JLabel jLabel3;
private JButton jButton3;
private JPasswordField jPasswordField1;
private JLabel jLabel1;
private JTextField jTextField1;

/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
NewJFrame inst = new NewJFrame();
inst.setVisible(true);
}

public NewJFrame() {
super();
initGUI();
}

private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.getContentPane().setLayout(null);
this.setTitle("Zae_Cryptor");
{
jButton1 = new JButton();
this.getContentPane().add(jButton1);
jButton1.setText("Enkripsi");
jButton1.setBounds(70, 88, 58, 24);
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {System.out.println("jButton1.actionPerformed,event="+ evt);
//TODO add your code for jButton10.actionPerformed
saveFile();

}
});
}
{
jTextField1 = new JTextField();
this.getContentPane().add(jTextField1);
jTextField1.setBounds(71, 17, 141, 19);
}
{
jLabel1 = new JLabel();
this.getContentPane().add(jLabel1);
jLabel1.setText("Input");
jLabel1.setBounds(8, 10, 60, 30);
}
{
jButton2 = new JButton();
this.getContentPane().add(jButton2);
jButton2.setText("Browse");
jButton2.setBounds(218, 17, 65, 19);
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {System.out.println("jButton2.actionPerformed,event="+ evt);
//TODO add your code for jButton1.actionPerformed
loadFile();
}
});
}
{
jLabel2 = new JLabel();
this.getContentPane().add(jLabel2);
jLabel2.setText("Password");
jLabel2.setBounds(7, 42, 60, 30);
}
{
jPasswordField1 = new JPasswordField();
this.getContentPane().add(jPasswordField1);
jPasswordField1.setBounds(71, 47, 141, 19);
}
{
jButton3 = new JButton();
this.getContentPane().add(jButton3);
jButton3.setText("Dekripsi");
jButton3.setBounds(150, 89, 62, 24);
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out
.println("jButton3.actionPerformed, event="
+ evt);
//TODO add your code for jButton10.actionPerformed
saveFile2();

}
});
}
{
jLabel3 = new JLabel();
this.getContentPane().add(jLabel3);
jLabel3.setText("zae3.blogspot.com");
jLabel3.setBounds(68, 112, 148, 30);
jLabel3.setFont(new java.awt.Font("Dialog",0,10));
jLabel3.setForeground(new java.awt.Color(0,0,255));
}

pack();
this.setSize(299, 170);
} catch (Exception e) {
e.printStackTrace();
}
}

private void loadFile ( ) {
JFileChooser chooser = new JFileChooser( );
int result = chooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) return;
try {
jTextField1.setText(chooser.getSelectedFile().getAbsolutePath());
//jTextField3.setText(chooser.getSelectedFile().getName());
}
catch (Exception e) {

}
}

private void saveFile( ) {
File plain = new File(jTextField1.getText());
Key key;
//copy = chooser.getSelectedFile();
File copy = new File(jTextField1.getText()+".pde");
try {
KeyGenerator generator = KeyGenerator.getInstance("DES");
// initialization of keygenerator with PRNG

byte[] seed = jPasswordField1.getText().getBytes();

generator.init(new SecureRandom(seed));
// generating key
key = generator.generateKey();
// creating of file
File kunci =new File(jTextField1.getText()+".key");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(kunci));
// writing key to a file
out.writeObject(key);
// closing of stream
out.close();

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
FileInputStream fis = new FileInputStream(plain);
FileOutputStream fos = new FileOutputStream(copy);
CipherOutputStream out2 = new CipherOutputStream(fos, cipher);
byte[] buffer = new byte[1024];
while (fis.read(buffer)>=0) {
out2.write(buffer);
}
kunci.delete();
plain.delete();
JOptionPane.showMessageDialog(this,"File Encrypted.");

}catch(Exception e) {

JOptionPane.showMessageDialog(this, e);
JOptionPane.showMessageDialog(this,"Failed.");
} finally {

}
}

private void saveFile2( ) {

//JFileChooser chooser = new JFileChooser( );
//chooser.showSaveDialog(this);
File plain = new File(jTextField1.getText());
Key key;
//copy = chooser.getSelectedFile();
File copy = new File(jTextField1.getText().replaceAll(".pde",""));

try {
KeyGenerator generator = KeyGenerator.getInstance("DES");
// initialization of keygenerator with PRNG
byte[] seed = jPasswordField1.getText().getBytes();
generator.init(new SecureRandom(seed));
// generating key
key = generator.generateKey();
File kunci =new File(jTextField1.getText().replaceAll(".pde","")+".key");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(kunci));
// writing key to a file
out.writeObject(key);
// closing of stream
out.close();

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
FileInputStream fis = new FileInputStream(plain);
FileOutputStream fos = new FileOutputStream(copy);
CipherOutputStream out2 = new CipherOutputStream(fos, cipher);
byte[] buffer = new byte[1024];
while (fis.read(buffer)>=0) {
out2.write(buffer);
}
fos.close();
fis.close();
kunci.delete();
plain.delete();
JOptionPane.showMessageDialog(this,"File decrypted.");
}catch(Exception e) {
JOptionPane.showMessageDialog(this, e);
JOptionPane.showMessageDialog(this,"Failed.");
} finally {

}

}

}

NAh ini hasilnya, kalau di running...mau dicobaaaaaaa.....!!!!

Zae
Salah satu metode penyandian yang pernah digunakan pada masa Yunani Kuno adalah Sandi Caesar (Caesar Cipher). Sandi ini merupakan algoritma substitusi tertua, dan proses enkripsinya adalah mengganti (substitusi) setiap huruf pada plainteks menjadi huruf ke-3 setelahnya. Dengan kata lain, setiap huruf digeser maju sebanyak tiga huruf. Dan untuk mendekripsi cipherteks cukup dengan menggeser mundur sebanyak tiga huruf.

Dengan menggunakan korespondensi 1-1 antara huruf alfabet dengan bilangan, yaitu a=0, b=1,…, z=25, maka secara umum Sandi Caesar dapat dituliskan dengan persamaan:

C = P+K mod 26

Dengan demikian, misal diberikan plainteks (P) “BELAJARSANDI”, dan Kunci (K)=3, maka cipherteksnya adalah “EHODMDUVDQGL”


Ni, Source codenya system sandi Caesar pake bahasa pemrograman java, tapi mainnya di ASCII, jadi maen di modulus 256

import javax.swing.*;
public class Caesar
{
public static void main(String[] args)
{
int shift=0;
try {
shift=new Integer(JOptionPane.showInputDialog("Masukan Kunci(0-255):")).intValue();
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null,e.toString());
System.exit(1);
}
String plaintext=JOptionPane.showInputDialog("Masukan input/plainteks:");
//Mengubah plainteks ke dalam byte disimpan dalam array b.
byte[] b=plaintext.getBytes();
//Mengenkripsi.
b=caesarEncipher(b,shift);
//Mengubah byte ke string.
String ciphertext=new String(b);
JOptionPane.showMessageDialog(null,"Ciphertextnya adalah : "+ciphertext);
//Decipher the enciphered byte array.
b=caesarDecipher(b,shift);
}

//Fungsi Enkripsi.
public static byte[] caesarEncipher(byte[] message,int shift)
{
byte[] m2=new byte[message.length];
for (int i=0;i
{
m2[i]=(byte)((message[i]+shift)%256);
}
return m2;
}

//Fungsi Dekripsi.
public static byte[] caesarDecipher(byte[] message,int shift) {
byte[] m2=new byte[message.length];
for (int i=0;i
m2[i]=(byte)((message[i]+(256-shift))%256);
}
return m2;
}
}


Jika di running hasilnya kaya ini ni
...Selamat mencoba



Zae
UMUM
Sekolah Tinggi Sandi Negara (STSN) adalah sekolah tinggi kedinasan yang diselenggarakan oleh Lembaga Sandi Negara, berdasarkan Keppres No. 22 tahun 2003 tentang pendirian Sekolah Tinggi Sandi Negara.
Mahasiswa STSN meruapakan mahasiswa ikatan dinas (dari umum) dan mahasiswa tugas belajar. Mahasiswa ikatan dinas pada semester IV akan diangkat menjadi Calon Pegawai Negeri Sipil (CPNS) di lingkungan Lembaga Sandi Negara, sesuai dengan ketentuan dan peraturan yang berlaku.

SISTEM PENDIDIKAN, BEBAN DAN LAMA STUDI
STSN menerapkan pendidikan dengan sistem paket yang dinyatakan dalam Satuan Kredit Semester (SKS). Beban studi yang harus diselesaikan adalah 146 SKS dan ditempuh selama 4 tahun. STSN mempunyai 2 (dua) program studi yaitu program studi Teknik Persandian dan program studi Manajemen Persandian.
Program studi Teknik Persandian memiliki 2 (dua) bidang minat, yaitu Teknik Kripto dan Teknik Rancang Bangun Peralatan Sandi.

PERSYARATAN UMUM

1. Persyaratan Umum
2. Warga Negara Indonesia.
3. Sanggup bekerja pada bidang Persandian.
4. Berkelakuan baik yang dinyatakan dengan Surat Keterangan Catatan Kepolisian (SKCK).
5. Berbadan sehat dan tidak buta warna yang dinyatakan dengan surat keterangan sehat dari dokter pemerintah atau Puskesmas.


PERSYARATAN KHUSUS

1. Asal calon siswa : Lulus SMA atau Madrasah Aliyah jurusan IPA dengan nila Matematika dan Bahasa Inggris pada raport kelas 12 semester 1 dan 2 minimal 7.
2. Usia : Berusia minimal 17 tahun, maksimal 21 tahun per 31 Agustus 2009.


PENDAFTARAN
Proses pendaftaran :
A. Pengambilan dan Pengembalian Formulir serta Kelengkapan Pendaftaran

* Tanggal : 22 Juni s.d 3 Juli 2009.
* Tempat : Kampus STSN “Bumi Sanapati”, Ciseeng, Bogor.
* Contoh formulir pendaftaran klik di sini

B. Pelayanan proses pendaftaran di atas dilakukan setiap hari kerja (Senin-Jumat), pukul 09.00 s.d 15.00 WIB
Tata cara dan kelengkapan pendaftaran

1. Membawa surat lamaran yang ditulis tangan sendiri dengan dilampirkan :
2. Fotokopi ijazah/Transkrip Nilai Ujian Nasional (NUN) yang telah dilegalisir.
3. Fotokopi raport kelas 12 semester 1 dan 2 yang telah dilegalisir.
4. SKCK dari Kepolisian.
5. Surat Keterangan sehat dan tidak buta warna dari dokter pemerintah atau Puskesmas.
6. Surat Pernyataan belum menikah dari orang tua/wali (Contoh klik di sini)
7. Pas foto berwarna 3 bulan teakhir ukuran 3 x 4 cm , sebanyak 3 (tiga) lembar dengan latar belakang merah.
8. Calon harus datang sendiri untuk mendaftar dengan membawa ijazah dan surat-surat asli sesuai persyaratan tersebut di atas.
9. Panitia menentukan peserta dapat mengikuti seleksi setelah persyaratan dan kelengkapan pendaftaran dipenuhi.
10. Biaya pendaftaran dan seleksi penerimaan mahasiswa baru STSN T.A. 2009/2010 adalah sebesar Rp. 50.000,- (lima puluh ribu rupiah).

SELEKSI SARINGAN MASUK
Seleksi Penerimaan Mahasiswa Baru (SPMB) STSN tahun akademik 2009/2010 terdiri dari beberapa tahap dan dilaksanakan di kampus STSN, Bogor. Jadwal ujian SPMB STSN ditentukan kemudian oleh panitia dan dapat dilihat melalui website STSN.
Tahapan ujian masuk sebagai berikut :

* Seleksi Tahap I : Tes Akademik (Tes Potensi Akademik, Matematika, Bahasa Inggris, Komputer, Fisika-Elektronika dan Pengetahuan Umum).
* Seleksi Tahap II : Tes Psiko
* Seleksi Tahap III : Tes Kesehatan dan Tes Kebugaran.
* Seleksi Tahap IV : Wawancara.
* Seleksi Tahap V : Pantukhir
* Seleksi Penerimaan Mahasiswa Baru STSN menggunakan sistem gugur pada setiap tahap.


PERJANJIAN IKATAN DINAS
Calon Mahasiswa dari umum yang dinyatakan lulus ujian saringan masuk dan diterima sebagai mahasiswa STSN, diwajibkan menandatangani perjanjian ikatan dinas dan mendapatkan Tunjangan Ikatan Dinas (TID),sesuai dengan peraturan yang berlaku.

FASILITAS
Kampus STSN terletak di daerah Parung-Bogor, dilengkapi dengan fasilitas :

1. Ruang Kuliah.
2. Ruang Rekreasi
3. Asrama
4. Laboratorium Komputer
5. Laboratorium Bahasa
6. Laboratorium Elektronika
7. Laboratorium Sandi
8. Perpustakaan
9. Sarana Ibadah
10. Sarana Olahraga
11. Poliklinik
Zae
MD5 ialah fungsi hash kriptografik yang digunakan secara luas dengan hash value 128-bit. Pada standard Internet (RFC 1321), MD5 telah dimanfaatkan secara bermacam-macam pada aplikasi keamanan, dan MD5 juga umum digunkan untuk melakukan pengujian integritas sebuah file.

MD5 di desain oleh Ronald Rivest pada tahun 1991 untuk menggantikan hash function sebelumnya, yaitu MD4 yang berhasil diserang oleh kriptanalis. Algoritma MD5 menerima masukan berupa pesan dengan ukuran sembarang dan menghasilkan message digest yang panjangnya 128 bit.

MD-5 adalah salah satu aplikasi yang digunakan untuk mengetahui bahwa pesan yang dikirim tidak ada perubahan sewaktu berada di jaringan. Algoritma MD-5 secara garis besar adalah mengambil pesan yang mempunyai panjang variable diubah menjadi ‘sidik jari’ atau ‘intisari pesan’ yang mempunyai panjang tetap yaitu 128 bit. ‘Sidik jari’ ini tidak dapat dibalik untuk mendapatkan pesan, dengan kata lain tidak ada orang yang dapat melihat pesan dari ‘sidik jari’ MD-5

Message Digest 5 (MD-5) adalah salah satu penggunaan fungsi hash satu arah yang paling banyak digunakan. MD-5 merupakan fungsi hash kelima yang dirancang oleh Ron Rivest dan didefinisikan pada RFC 1321[10]. MD-5 merupakan pengembangan dari MD-4 dimana terjadi penambahan satu ronde[1,3,10]. MD-5 memproses teks masukan ke dalam blok-blok bit sebanyak 512 bit, kemudian dibagi ke dalam 32 bit sub blok sebanyak 16 buah. Keluaran dari MD-5 berupa 4 buah blok yang masing-masing 32 bit yang mana akan menjadi 128 bit yang biasa disebut nilai hash[3,10]. Simpul utama MD5 mempunyai blok pesan dengan panjang 512 bit yang masuk ke dalam 4 buah ronde. Hasil keluaran dari MD-5 adalah berupa 128 bit dari byte terendah A dan tertinggi byte D.


Algoritma Dan Cara Kerja


a. Penjelasan Algoritma MD5

Setiap pesan yang akan dienkripsi, terlebih dahulu dicari berapa banyak bit yang terdapat pada pesan. Kita anggap sebanyak b bit. Di sini b adalah bit non negatif integer, b bisa saja nol dan tidak harus selalu kelipatan delapan.

b. Cara Kerja MD5

Langkah-langkah pembuatan message digest secara garis besar:

1. Penambahan bit-bit pengganjal (padding bits).

2. Penambahan nilai panjang pesan semula.

3. Inisialisasi penyangga (buffer) MD.

4. Pengolahan pesan dalam blok berukuran 512 bit.


1. Penambahan Bit-bit Pengganjal

    • Pesan ditambah dengan sejumlah bit pengganjal sedemikian sehingga panjang pesan (dalam satuan bit) kongruen dengan 448 modulo 512.
    • Jika panjang pesan 448 bit, maka pesan tersebut ditambah dengan 512 bit menjadi 960 bit. Jadi, panjang bit-bit pengganjal adalah antara 1 sampai 512.
    • Bit-bit pengganjal terdiri dari sebuah bit 1 diikuti dengan sisanya bit 0.


2. Penambahan Nilai Panjang Pesan

    • Pesan yang telah diberi bit-bit pengganjal selanjutnya ditambah lagi dengan 64 bit yang menyatakan panjang pesan semula.
    • Jika panjang pesan > 264 maka yang diambil adalah panjangnya dalam modulo 264. Dengan kata lain, jika panjang pesan semula adalah K bit, maka 64 bit yang ditambahkan menyatakan K modulo 264.
    • Setelah ditambah dengan 64 bit, panjang pesan sekarang menjadi kelipatan 512 bit.


3. Inisialisai Penyangga MD

* MD5 membutuhkan 4 buah penyangga (buffer) yang masing-masing panjangnya 32 bit. Total panjangpenyangga adalah 4 ´ 32 = 128 bit. Keempat penyangga ini menampung hasil antara dan hasil akhir.

* Keempat penyangga ini diberi nama A, B, C, dan D. Setiap penyangga diinisialisasi dengan nilai-nilai (dalam notasi HEX) sebagai berikut:

A = 01234567

B = 89ABCDEF

C = FEDCBA98

D = 76543210


4. Pengolahan Pesan dalam Blok Berukuran 512 bit.

    * Pesan dibagi menjadi L buah blok yang masing-masing panjangnya 512 bit (Y0 sampai YL – 1). *

    * Setiap blok 512-bit diproses bersama dengan penyangga MD menjadi keluaran 128-bit, dan ini

    disebut proses HMD5. Gambaran proses HMD5 diperlihatkan pada Gambar berikut ini.


c. Inisialisasi MD5

Pada MD-5 terdapat empat buah word 32 bit register yang berguna untuk menginisialisasi message digest

pertama kali. Register-register ini di inisialisasikan dengan bilangan hexadesimal.

word A: 01 23 45 67

word B: 89 AB CD EF

word C: FE DC BA 98

word D: 76 54 32 10

Register-register ini biasa disebut dengan nama Chain variabel atau variabel rantai.


d. Proses Pesan di Dalam Blok 16 word

Pada MD-5 juga terdapat 4 (empat) buah fungsi nonlinear yang masing-masing digunakan pada tiap operasinya (satu fungsi untuk satu blok), yaitu:

F(X,Y,Z) = (X Ù Y) Ú ((Ø X) Ù Z)

G(X,Y,Z) = (X Ù Z) Ú (Y Ù (Ø Z))

H(X,Y,Z) = X Å Y Å Z

I (X,Y,Z) = Y Å (X Ú (Ø Z))

(Å untuk XOR, Ù untuk AND, Ú untuk OR dan Ø untuk NOT).

Pada Gambar 3.2 dapat dilihat satu buah operasi dari MD-5 dengan operasi yang dipakai sebagai contoh adalah FF(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + F(b,c,d) + Mj + ti) <<<>

FF(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + F(b,c,d) + Mj + ti) <<<>

GG(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + G(b,c,d) + Mj + ti) <<<>

HH(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + H(b,c,d) + Mj + ti) <<<>

II(a,b,c,d,Mj,s,ti) menunjukan a = b + ((a + I(b,c,d) + Mj + ti) <<<>


Zae
Fungsi hash sering juga disebut fungsi enkripsi satu arah, atau disebut juga message diggest. Fungsi hash digunakan untuk menjamin servis otentikasi dan integritas suatu pesan atau file. Suatu fungsi hash h memetakan bit-bit string dengan panjang sembarang ke sebuah string dengan panjang tertentu misal n. Dengan domain D dan range R maka: Proses hashing merupakan proses pemetaan suatu input string menjadi output disebut. Output dari fungsi hash disebut nilai hash atau hasil hash.

h : D → R dan |D| > |R|

Ide utama dari hash adalah bahwa suatu nilai hash berlaku sebagai representasi dari data secara sederhana (disebut juga message-diggest, imprint, digital finger-print) dari suatu input string, dan dapat digunakan hanya jika nilai hash tersebut dapat diidentifikasi secara unik dengan input string tersebut. Fungsi h adalah many-to-one, sehingga memungkinkan terjadinya pasangan input dengan output sama : collision. Secara umum fungsi hash harus memiliki 2 (dua) sifat dasar yaitu :

1. Kompresi (Compression), fungsi h memetakan suatu input x dgn panjang sembarang ke output y = h(x) dgn panjang tetap n;

2. Mudah dihitung (Easy Computation), dengan diberikan h dan sebuah input x, maka y mudah dihitung.

Fungsi hash diklasifikasikan dalam 2 kelas yaitu (menurut Menezes, Oorschot dan Vanstone, 1996):

1. MDCs (Manipulation Detection Codes).

2, Message Authentication Codes (MACs).

MDCs (Manipulation Detection Codes), atau juga disebut dengan istilah modification detecton codes atau message integrity codes (MICs) yang merupakan fungsi Hash tanpa kunci. Tujuannya adalah (informal) untuk memberikan suatu imej yang representatif (disebut nilai hash) pada suatu message. Pada kelas ini input darifungsi hash hanyalah pesan yang akan dikirim dan tidak membutuhkan input kunci rahasia. MDCs banyak digunakan untuk servis integritas data khususnya dalam aplikasi skema digital-signature. Pembagian kelas dari MDCs adalah:1. One Way hash Functions (OWHFs).2. Collision resistant hash Functions (CRHFs).Contoh algoritma hash untuk MDCs diantaranya adalah : MD2, MD4, MD5, RIPE-MD, Snefru, N-Hash, Secure Hash Algoritm-1 (SHA-1) yang merupakan OWHF sedangkan MASH-1 dan MASH-2 masuk kategori CRHF.

Message Authentication Codes (MACs) MACs adalah fungsi hash untuk otentikasi data dengan teknik simetrik. Algoritma MACs mengambil dua input yang secara fungsional berbeda, sebuah pesan (message) dan sebuah kunci rahasia (maka disebut “keyed hash function”), untuk menghasilkan suatu output dengan ukuran yang tetap. Secara praktis sulit menghasilkan nilai MAC yang sama tanpa pengetahuan tentang kunci rahasia tersebut. MACs juga menyediakan servis integritas data. Contoh algoritma hash untuk aplikasi MACs adalah HMAC, MD5-MAC, MAA, Block-based MACs : CBC-MAC, RIPE-MAC, GOST; Stream-based MACs : SEAL; CRC-based MAC, dan lainnya. Pada prinsipnya MACs dapat dikonstruksi dari MDCs seperti contohnya algoritma MD5-MAC.