Pengembangan Algoritma Hill Cipher dengan Kunci Matriks 4x4 Menggunakan Java

Table of Contents
Sebelum artikel ini saya tulis, tidak pernah terbayangkan jika Algoritma Hill Cipher dapat dikembangkan lagi ke tahap lebih rumit daripada kunci 3x3, yakni kunci 4x4. Sehingga, jika kunci 4x4 ini berhasil, kemungkinan naik level ke kunci 5x5 bahkan 10x10 pun bisa. Tulisan saya sebelumnya tentang Hill Cipher 3x3 sudah saya selesaikan di Hill Cipher 3x3, bahkan saya buatkan pula video demonya di youtube.

Tahun 2016 lalu, saya sudah berpuas diri kala mampu mengimplementasikan hill cipher 2x2 untuk teks berupa karakter dan angka. Ternyata ilmu pengetahuan berkembang pesat. Teman-teman blogger memaksa saya untuk membuat varian hill cipher yang lebih variatif. Muncullah pengembangan baru hill cipher
  1. Hill Cipher 2x2 untuk 256 Karakter ASCII
  2. Hill Cipher 2x2 Android
  3. Hill Cipher 2x2 untuk Dokumen Ms. Word
  4. Hill Cipher 3x3 untuk 256 Karakter ASCII
  5. Hill Cipher 4x4 untuk 256 Karakter ASCII
  6. Hill Cipher 4x4 Android
Pengembangan ini juga sangat menantang. Lebih rumit daripada kunci 3x3, bukan hanya karena source code-nya yang sulit, melainkan juga karena perhitungan manualnya yang jarang ada contoh. Prinsip saya simpel, jika menerapkan algoritma ke coding, maka kuasai dulu hitung manualnya. Coding pun akan lebih mudah. Kali ini menguasai hitung manual luar biasa sulit. Jika pada kunci 3x3 ada contoh buku Rinaldi Munir yang membantu, untuk kunci 4x4 nyaris tiada contoh. Bahkan menghitung determinan saja bingung apalagi menemukan invers multiplikatif.

Saya merenung lama...

Berdzikir dan bertafakkur...

Alhamdulillah, ada titik temu. Titik temunya adalah menemukan determinan dengan sabar menggunakan Metode Sarrus. Dan menemukan 1 sumber rujukan hitung manual untuk invers. Tapi hanya hasil invers 4x4, yang menghasilkan minus dan pecahan. Saya coba oprek sebisanya menggunakan peninggalan coding kunci 3x3. Utak atik mathuk. Akhirnya ketemu juga. Alhamdulillah ya Allaaaaah.

Input Kunci 4x4 dan Plainteks
String text = "jawa timur";
        int[][] matrix = {{7, 11, 15, 10}, {6, 13, 9, 7}, {6, 19, 10, 6}, {5, 7, 8, 10}};
        
        int B1K1 = matrix[0][0];
        int B1K2 = matrix[0][1];
        int B1K3 = matrix[0][2];
        int B1K4 = matrix[0][3];

        int B2K1 = matrix[1][0];
        int B2K2 = matrix[1][1];
        int B2K3 = matrix[1][2];
        int B2K4 = matrix[1][3];

        int B3K1 = matrix[2][0];
        int B3K2 = matrix[2][1];
        int B3K3 = matrix[2][2];
        int B3K4 = matrix[2][3];

        int B4K1 = matrix[3][0];
        int B4K2 = matrix[3][1];
        int B4K3 = matrix[3][2];
        int B4K4 = matrix[3][3];

        System.out.println("========== KUNCI ENKRIPSI MATRIKS ORDO 4X4 ===========");
        System.out.println(B1K1 + " " + B1K2 + " " + B1K3 + " " + B1K4);
        System.out.println(B2K1 + " " + B2K2 + " " + B2K3 + " " + B2K4);
        System.out.println(B3K1 + " " + B3K2 + " " + B3K3 + " " + B3K4);
        System.out.println(B4K1 + " " + B4K2 + " " + B4K3 + " " + B4K4);

        if (cekKunci(matrix) == true) {
            new HillChiper_Enkripsi().hitungEnkripsi(text, matrix);
        }

Hasil Enkripsi



Proses Dekripsi



Apakah ada yang perlu kita diskusikan, teman-teman? Silakan komentar atau WA saja. Semoga saya bisa membantu kesulitan teman-teman. 

Post a Comment