Tutorial Pemrograman Kriptografi C++ dan Java

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.....!!!!

Label: 6 komentar | edit post
Reaksi: 
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



Label: 0 komentar | edit post
Reaksi: 
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