Breaking

Senin, 03 April 2017

Contoh Hill Cipher dalam Java



Dalam kriptografi klasik, Hill cipher adalah cipher substitusi polygraphic berdasarkan aljabar linier. Diciptakan oleh Lester S. Hill pada tahun 1929. Hill cipher adalah cipher polygraphic pertama di dunia yang bisa mengenkripsi / mendekripsi 3 atau lebih huruf dalam satu waktu.

Teknik kriptografi ini diciptakan dengan maksud untuk dapat menciptakan cipher (kode) yang tidak dapat dipecahkan menggunakan teknik analisis frekuensi.

Hill Cipher tidak mengganti setiap abjad yang sama pada plaintext dengan abjad lainnya yang sama pada ciphertext karena menggunakan perkalian matriks pada dasar enkripsi dan dekripsinya.

Setiap huruf diwakili oleh sejumlah modulo 26. Skema yang digunakannya cukup sederhana, dimana yang digunakan huruf A = 0, B = 1, ..., Z = 25, namun sebenarnya bukan ini fitur atau kemampuan utama dari Hill cipher . Untuk mengenkripsi pesan, setiap blok n huruf (dianggap sebagai vektor n-komponen) dikalikan dengan n × n matriks, terhadap modulus 26. Untuk mendekripsi pesan, setiap blok dikalikan dengan kebalikan dari matriks yang digunakan untuk enkripsi.

Matriks yang digunakan untuk enkripsi adalah kunci cipher, dan itu harus dipilih secara acak dari himpunan n × n matriks (modulo 26). Kenapa menggunakan modulo 26? Cipher harus disesuaikan dengan alfabet dengan jumlah huruf.

Dalam rangka untuk mendekripsi, kita beralih ciphertext kembali ke dalam vektor, maka cukup kalikan dengan matriks inverse dari matriks kunci. Ada metode standar untuk menghitung invers matriks, lihat matriks inversi untuk rincian.

Dalam hal ini memang sangat dibutuhkan pengetahuan untuk persamaan matematika perkalian matrik dan bagaimana mencari matrik invers dari matrik kunci, termasuk bagaiamana mencari modular invers dari sebuah matrik.


package ciphers;
import java.io.*;
import java.lang.*;
public class hillcipher
{
public static void main(String []arg)throws Exception
{
    int k[][]={{17,17,5}, {21,18,21}, {2,2,19}};
    int p[]=new int[300];
    int c[]=new int[300];
    int i=0;   
    //System.out.println("enter key");
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    /*for(i=0;i<3;i++)
    {
    for(int j=0;j<3;j++)
    {
    String str=br.readLine();
    k[i][j]=Integer.parseInt(str);
    }
    }*/

    System.out.println("enter plain text");
    String str=br.readLine();
   
    for( i=0;i<str.length();i++)
    {
        int c1=str.charAt(i);
        //System.out.println(c1);
        p[i]=(c1)-97;
    }
                i=0;int zz=0;
        for( int b=0;b<str.length()/3;b++)
        {
        for(int j=0;j<3;j++)
        {
        for(int x=0;x<3;x++)
        {
        c[i]+=k[j][x]*p[x+zz];
        }i++;
        }
        zz+=3;
        }
                System.out.println("Encrypted Text : ");
        for(int z=0;z<str.length();z++)
        System.out.print((char)((c[z]%26)+97));
   
   
}

}

Tidak ada komentar:

Posting Komentar

close