Monday, April 17, 2017

Kriptografi Sederhana Dengan Algoritma Blowfish Menggunakan Java


Pada postingan sebelumnya saya memposting tentang enkripsi dan dekripsi sederhana dengan cara menggantikan kata yang di input dengan menggeser hurufnya sesuai dengan angka pergeseran yang di input.
kali ini saya membuat penyandian menggunakan Algoritma Blowfish apa itu Algoritma Blowfish, menurut wikipedia https://id.wikipedia.org/wiki/Blowfish_(penyandian)

Blowfish merupakan algoritma kunci simetrik cipher blok yang dirancang pada tahun 1993 oleh Bruce Schneier untuk menggantikan DES. Pada saat itu banyak sekali rancangan algoritma yang ditawarkan, namun hampir semua terhalang oleh paten atau kerahasiaan pemerintah Amerika. Schneier menyatakan bahwa blowfish bebas paten dan akan berada pada domain publik. Dengan pernyataan Schneier tersebut blowfish telah mendapatkan tempat di dunia kriptografi, khususnya bagi masyarakat yang membutuhkan algoritma kriptografi yang cepat, kuat, dan tidak terhalang oleh lisensi.
Keberhasilan blowfish dalam menembus pasar telah terbukti dengan diadopsinya blowfish sebagai Open Cryptography Interface (OCI) pada kernel linux versi 2.5 keatas. Dengan diadopsinya blowfish, maka telah menyatakan bahwa dunia open source menganggap blowfish adalah salah satu algoritma yang terbaik. Kesuksesan blowfish mulai memudar setelah kehadiran algoritma-algoritma dengan ukuran blok yang lebih besar, seperti AES. AES sendiri memang dirancang untuk menggantikan DES. Sehingga secara keseluruhan AES lebih unggul dari DES dan juga blowfish.

Blowfish adalah algoritma kriptografi kunci simetrik cipher blok dengan panjang blok tetap sepanjang 64 bit[1]. Algortima tersebut juga menerapkan teknik kunci yang berukuran sembarang. Ukuran kunci yang dapat diterima oleh blowfish adalah antara 32 hingga 448 bit, dengan ukuran standar sebesar 128 bit. Blowfish memanfaatkan teknik pemanipulasian bit dan teknik pemutaran ulang dan pergiliran kunci yang dilakukan sebanyak 16 kali. Algoritma utama terbagi menjadi dua sub-algoritma utama, yaitu bagian ekspansi kunci dan bagian enkripsi-dekripsi data.
Pengekspansian kunci dilakukan pada saat awal dengan masukan sebuah kunci dengan panjang 32 hingga 448 bit, dan keluaran adalah sebuah larik sub-kunci dengan total 4168 bita. Bagian enkripsi-dekripsi data terjadi dengan memanfaatkan perulangan 16 kali terhadap jaringan feistel. Setiap perulangan terdiri dari permutasi dengan masukan adalah kunci, dan substitusi data. Semua operasi dilakukan dengan memanfaatkan operasi xor dan penambahan. Operasi penambahan dilakukan terhadap empat larik lookup yang dilakukan setiap putarannya.
oke langsung saja berikut ini contoh programnya

Nama file : blowFishCipher.java

import java.util.Scanner;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class blowFishCipher {
    public static void main(String[] args) throws Exception {
    
        KeyGenerator keyGenerator = KeyGenerator.getInstance("blowfish");
        
        SecretKey secretKey = keyGenerator.generateKey();
        
        Cipher cipher = Cipher.getInstance("blowfish");
        
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Masukan Kata Yang Ingin Di Enkripsi : ");
        
        String inputText = sc.nextLine();
        
        byte[] enkripsi = cipher.doFinal(inputText.getBytes());
        
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        
        byte[] dekripsi = cipher.doFinal(enkripsi);
        
        System.out.println("Kata Setelah Di Enkripsi : " + new String(enkripsi));
        
        System.out.println("Kata Kembali Di Dekripsi : " + new String(dekripsi));
        
    }
}

Output

run:
Masukan Kata Yang Ingin Di Enkripsi : ngejava.com
Kata Setelah Di Enkripsi : ��֋�rM: ���ҿp�
Kata Kembali Di Dekripsi : ngejava.com
BUILD SUCCESSFUL (total time: 9 seconds)

selamat mencoba, semoga bermanfaat

Tuesday, April 4, 2017

Algoritma Dekripsi Sederhana Menggunakan Java


Setelah pada postingan sebelumnya Algoritma Enkripsi Sederhana Menggunakan Java saya membuat contoh program untuk enkripsi, kali ini saya buat program untuk dekripsinya.
berikut ini contoh program untuk dekripsinya

Nama file : dekripsi.java

import java.util.Scanner;

public class dekripsi {
    
    public static void main(String[] args) {
         
     char[] kr ={'0','1','2','3','4','5','6','7','8','9',' ','.','□',+
                 'a','b','c','d','e','f','g','h','i','j','k','l','m',+
                'n','o','p','q','r','s','t','u','v','w','x','y','z'};
        String str = "";
        char[] Array1 = null;
        int geser = 0;
        
        Scanner sc = new Scanner(System.in);
        System.out.print("Masukan Kalimat Yang Akan Di Dekripsi : ");
        Array1 =(sc.next().toCharArray());
        System.out.print("Masukan Angka Pergeseran Huruf : ");
        geser = sc.nextInt();

       for (char c1 : Array1){
            for(int i=0; i<=37; i++){
                if(c1 == kr[i]){
                   i = i-(geser);
                   if(i<=-1){
                       i = i+38;
                    }
                    c1 = kr[i];
                    str = str + c1;
                 }
            }
        }
        
        System.out.println("hasil : " + str);
        
    }
    
}

Output

run:
Masukan Kalimat Yang Akan Di Dekripsi : qjhmdydgrwfrp
Masukan Angka Pergeseran Huruf : 3
hasil : ngejavadotcom
BUILD SUCCESSFUL (total time: 14 seconds)

selamat mencoba, semoga bermanfaat ...

Monday, April 3, 2017

Algoritma Enkripsi Sederhana Menggunakan Java

gambar output

Kali ini saya akan membuat contoh program algoritma sederhana untuk meng-enkripsi sebuah kata dengan cara meengganti huruf dengan pergeseran karakter nya berupa "n" pergeseran yang mana untuk "n" nya kita inputkan seberapa banyak pergeserannya.
hasilnya akan seperti gambar diatas, tentu saja program ini banyak kelemahannya seperti tidak bisanya karakter "spasi" dan beberapa karakter lainya.
berikut ini contoh programnya:

Nama file : enkripsi.java

import java.util.Scanner;

public class enkripsi {
    
    public static void main(String[] args) {
         
     char[] kr ={'0','1','2','3','4','5','6','7','8','9',' ','.','□',+
                 'a','b','c','d','e','f','g','h','i','j','k','l','m',+
                'n','o','p','q','r','s','t','u','v','w','x','y','z'};
        String str = "";
        char[] Array1 = null;
        int geser = 0;
        
        Scanner sc = new Scanner(System.in);
        System.out.print("Masukan Kalimat Yang Akan Di Enkripsi : ");
        Array1 =(sc.next().toCharArray());
        System.out.print("Masukan Angka Pergeseran Huruf : ");
        geser = sc.nextInt();

        for (char c1 : Array1){
            for(int i=0; i<=38; i++){
                if(c1 == kr[i]){
                 i = i+(geser);
                   if(i>=39){
                       i = i-39;
                    }
                    c1 = kr[i];
                    str = str + c1;
                 }
            }
        }
        
        System.out.println("hasil : " + str);
        
    }
    
}

Output

run:
Masukan Kalimat Yang Akan Di Enkripsi : ngejavadotcom
Masukan Angka Pergeseran Huruf : 3
hasil : qjhmdydgrwfrp

BUILD SUCCESSFUL (total time: 17 seconds)

Selamat mencoba, semoga bermanfaat ...


Friday, March 31, 2017

Contoh Program Untuk Penyebut Bilangan Dengan Java


Berikut ini adalah contoh program sederhana untuk merubah bilangan angka yang di-input menjadi kalimat tulisan misal kita input 123 maka outputnya adalah "seratus dua puluh tiga" seperti pada gambar diatas.
langsung saja berikut contoh programnya :

Nama file : contoh_1.java

import java.util.Scanner;

public class contoh_1 {
    String[] angka={"","Satu","Dua","Tiga","Empat","Lima","Enam","Tujuh","Delapan","Sembilan","Sepuluh","Sebelas"};

    private String sebut(int x){
        String bilang="";
        int y = x / 100;
        if(y > 0){
            bilang = angka[y]+" Ratus ";
            if(y == 1)bilang="Seratus ";
            x%=100;
        }
        if(x<12)bilang += angka[x];
        else{
            y=x/10;
            x%=10;
            if(y==1)
                bilang +=angka[x] + " Belas";
            else
                bilang += angka[y]+ " Puluh "+ angka[x];
        }
        return bilang;
    }
    
    private String terbilang(long  x){
        int y;
        String bilang="";
        String[] satuan={""," Ribu "," Juta "," Milyar "," Trilyun "," Quadrilyun "," Quintilyun "};
        if(x > Math.pow(10, 20)) return "Bilangan terlalu besar";
        for(int i=6;i>0;i--){
            y =  (int) (x/Math.pow(10, i*3));
            if(y > 0){
                if(y==1 && i==1) bilang += " Seribu "; else bilang += sebut(y) + satuan[i];
            } x %= Math.pow(10, i*3);
        }
        bilang+=sebut((int)x);
        return bilang;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Masukan Bilangan yang akan disebut: ");
        System.out.println(new contoh_1().terbilang(sc.nextLong()));
    }

Selamat mencoba, semoga bermanfaat.

Monday, August 22, 2016

Membuat Aplikasi Notepad Sederhana Dengan Java


Berikut ini adalah contoh program aplikasi notepad dengan java

Nama file : notepad_Sederhana.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class notepad_Sederhana extends JFrame
{
    private JPopupMenu popup = new JPopupMenu();
    private JMenuItem menuCopy = new JMenuItem("Copy");
    private JMenuItem menuCut = new JMenuItem("Cut");
    private JMenuItem menuPaste = new JMenuItem("Paste");
    private JMenuItem menuSelectAll = new JMenuItem("Select All");
    private JMenuBar menu_Baris = new JMenuBar();
    private JMenu menu_File = new JMenu("File");
    private JMenu menu_About = new JMenu("About");
    private JMenuItem mi_About = new JMenuItem("About");
    private JMenuItem mi_Save = new JMenuItem("Save");
    private JMenuItem mi_Open = new JMenuItem("Open");
    private JMenuItem mi_Exit = new JMenuItem("Exit");
    private JTextArea text_Area = new JTextArea("",0,0);
    private JScrollPane js = new JScrollPane(text_Area);
    private JFileChooser fc = new JFileChooser();
    
     //Konstuktor
public notepad_Sederhana()
{      
    Container konten = getContentPane();
    setTitle("Notepad");
    setSize(700,600);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
  
    konten.add(js);
    setJMenuBar(menu_Baris);
    menu_Baris.add(menu_File);
    menu_File.add(mi_Open);
    menu_File.add(mi_Save);
    menu_Baris.add(menu_About);
    menu_About.add(mi_About);
   
    popup.add(menuCut);
    popup.add(menuCopy);
    popup.add(menuPaste);
    popup.add(menuSelectAll);
    text_Area.add(popup);
    text_Area.addMouseListener(new MousePopupListener());
    text_Area.requestFocus();
        
    mi_Save.setMnemonic(KeyEvent.VK_S); //Membuat nama shortcut
    mi_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK)); //Membuat shorcut Keyboard 
        
    menu_File.addSeparator(); //Menambahkan garis separator
    mi_Open.setMnemonic(KeyEvent.VK_O);
    mi_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
    menu_File.add(mi_Exit);
       
    mi_About.setMnemonic(KeyEvent.VK_A);
    mi_About.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK));
        
    text_Area.setFont(new Font("Arial",Font.PLAIN,14)); //Mengatur Fonts
    text_Area.setLineWrap(true);
    text_Area.setWrapStyleWord(true);
      
mi_Open.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        int buka = fc.showOpenDialog(text_Area);
        if(buka == JFileChooser.APPROVE_OPTION)
        {
            text_Area.setText("");
            try
            {
                Scanner scan = new Scanner(new FileReader(fc.getSelectedFile().getPath())); //Membuat scanner membaca file yang dibuka
                while(scan.hasNext())
                {
                    text_Area.append(scan.nextLine());
                }
            }
            catch(Exception ex)
            {
                System.out.println(ex);
            }
        }
    }
});
      
mi_Save.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        int simpan = fc.showOpenDialog(text_Area);
        if(simpan == JFileChooser.APPROVE_OPTION)
        {
            try
            {
            BufferedWriter bw = new BufferedWriter(new FileWriter(fc.getSelectedFile().getPath())); //Menulis File yang kita buka di TextArea
            bw.write(text_Area.getText());
            bw.close();
            }
            catch(Exception ex)
            {
                System.out.println(ex);
            }
        }
    }
});
      
mi_Exit.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
       dispose(); //Keluar dari aplikasi
    }
});
      
mi_About.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        JOptionPane.showMessageDialog(null,"ngejava.com","Pesan",JOptionPane.INFORMATION_MESSAGE);
    }
}); 

menuCopy.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        text_Area.copy();
    }
}); 

menuPaste.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        text_Area.paste();
    }
}); 

menuCut.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        text_Area.cut();
    }
}); 

menuSelectAll.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent act)
    {
        text_Area.selectAll();
    }
}); 



}
class MousePopupListener extends MouseAdapter
{
    public void mousePressed(MouseEvent e)
    {
        checkPopup(e);
    }
    public void mouseClicked(MouseEvent e)
    {
        checkPopup(e);
    }
    public void mouseReleased(MouseEvent e)
    {
        checkPopup(e);
    }
    private void checkPopup(MouseEvent e)
    {
        if (e.isPopupTrigger())
    {
        popup.show(notepad_Sederhana.this, e.getX(), e.getY());
    }
    }
}
   
    public static void main(String[] ar)
    {
        new notepad_Sederhana();
    }
}

Output


Sunday, August 21, 2016

Menulis Teks Di Tengah Applet


Berikut ini adalah contoh program untuk membuat teks berada ditengah-tengah applet.

Nama file : text_Tengah.java

import java.awt.*;
import java.applet.*;

/**
 *
 * @author xp
 */
public class text_Tengah extends Applet {
    final Font f = new Font("Helvetica", Font.BOLD, 15);

    public void paint(Graphics g) {
        Dimension d = this.size();
        g.setColor(Color.lightGray);
        g.fillRect(0, 0, d.width, d.height);
        
        g.setColor(Color.black);
        g.setFont(f);
        
        g.drawRect(0, 0, d.width-1, d.height-1);
        
        
        tulisan_Tengah("welcome to ngejava.com", d.width, d.height, g);
        
    }

    void tulisan_Tengah(String s, int w, int h, Graphics g) {
        FontMetrics fm = g.getFontMetrics();
        
        int x = (w-fm.stringWidth(s))/2;
        int y = h/2+fm.getAscent()/4;
        g.drawString(s, x, y);
    }
    
}

Output


program ini dibuat menggunakan netbeans
selamat mencoba semoga bermanfaat ...

Metode setPaintMode() Dan setXORMode(Color) Di Java Applet


metode setPaintMode() adalah methos pengisian default untuk menggambar grafik. dalam metode ini, piksel yang terdapat dalam applet ditimpa dengan warna yang berlaku.
Metode setXORMode merupakan mode gambar yang memberi alternatif warna pikselbergantian antara warna yang berlaku saat ini dan warna baru yang ditentukan dalam XOR
berikut ini adalah contoh programnya.

Nama file : latihan_Warna.java

import java.awt.*;
import java.applet.*;
/**
 *
 * @author xp
 */

public class latihan_Warna extends Applet {

    public void paint(Graphics g) {
        g.setColor(Color.blue);
        g.fillRect(20, 70, 100, 100);
        
        g.setColor(Color.green);
        g.fillRect(40, 90, 100, 100);
        
        g.setXORMode(Color.red);
        g.fillRect(60, 110, 100, 100);
        g.fillRect(80, 130, 100, 100);
        
        g.setXORMode(Color.blue);
        g.fillRect(100, 150, 100, 100);
         
        //mengembalikan warna seperti sebelum method setXORMode()
        g.setPaintMode();
        g.fillRect(120, 170, 100, 100);
         
        g.setColor(Color.blue);
        g.fillRect(140, 190, 100, 100);
         
        g.setXORMode(Color.white);
        g.setColor(Color.black);
        g.setFont(new Font("Helvetica", Font.PLAIN, 15));
        g.drawString("ngejava.com", 80, 20);
         
    }
    
}

output


program dibuat menggunakan netbeans
selamat mencoba, semoga bermanfaat . . .

Kriptografi Sederhana Dengan Algoritma Blowfish Menggunakan Java

Pada postingan sebelumnya saya memposting tentang enkripsi dan dekripsi sederhana dengan cara menggantikan kata yang di input dengan m...