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));
}
}
No comments:
Post a Comment
Silakan berkomentar ....