Source Code Hill Cipher Bahasa C
Halo sobat apakah kalian seorang programmer?
Apakah kalian mendapatkan tugas membuat program dengan Bahasa C?
dan apakah tugas tersebut Hill Cipher?
Ya benar sekali disini saya akan membantu mengatasi tugas kalian yang berat ini, kalian gak akan kuat biar aku saja dengan membagikan Source Code untuk program Hill Cipher ini. Sebelum itu kita harus tahu dulu apa itu Hill Cipher kan percuma punya codingannya tapi gak tahu apa itu Hill Cipher.
Hill Cipher adalah algoritma kriptografi dengan menggunakan kunci simetris. Dikembangkan oleh Lester Hill pada tahun 1929. Menggunakan matriks m x m untuk dapat melakukan enkripsi dan dekripsi.
Enkripsi merupakan proses dimana sebuah informasi diamankan dengan mengacak data menggunakan metode tertentu sehingga tidak dapat dibaca pihak lain yang tidak tahu cara (kunci) untuk membukanya.
Deskripsi merupakan kebalikan dari Enkripsi, dimana data acak akan diolah menggunakan metode tertentu menjadi data murni yang dapat dibaca.
Saya akan membagikan Source code dengan hill cipher kunci matriks 2 x 2. Saya biasa menggunakan Code::Blocks karena sejak pertama belajar.
Source Code Hill Cipher
Silahkan buat 3 file, Main, Fungsi, Header terlebih dahulu.
Main
#include "header.h"
//motubablog.blogspot.com
int main()
{
int sesuai;
int kunci_angka[4];
char kunci[4], pesan[100];
char pesanEn[100], pesanDe[100];
puts("====== Program Hill Cipher ======");
sesuai:
printf("Masukan Kunci : ");gets(kunci);
nilaikunci(kunci, &kunci_angka, 4);
sesuai=cek_kunci(kunci_angka);
if(sesuai==1){
puts("<<<Kunci Sesuai>>>");
}
else{
puts("Kunci tidak sesuai, mohon diulang");
goto sesuai;
}
printf("Masukan Pesan : ");gets(pesan);
int pesanlen=strlen(pesan);
int pesanlen1;
int pesanToNum[pesanlen];
puts("-----------------------------------------");
printf("Kunci : ");cetak_pesan(kunci,4);
printf("\nPesan : ");cetak_pesan(pesan,pesanlen);
puts("\n-----------------------------------------\n");
pesan[pesanlen]=pesan[pesanlen-1];
pesanlen1=pesanlen+1;
int MEnkripsi[500];
int MDekripsi[500];
int hasilXE[500];
int hasilXD[500];
nilaikunci(kunci,&kunci_angka,4);
puts("-----------------------------------------");
puts("Matriks dari Kunci");
cetak_matrik(kunci_angka, 5);
nilaikunci(pesan,&pesanToNum,pesanlen1);
puts("-----------------------------------------");
puts("Matriks dari Pesan");
cetak_matrik(pesanToNum, pesanlen1);
puts("-----------------------------------------");
system("pause");
puts("-----------------------------------------");
puts("Matriks Enkripsi = kunci * pesan");
Enkripsi(kunci_angka, pesanToNum, pesanlen1, &MEnkripsi,&hasilXE);
cetak_matrik(hasilXE,pesanlen1);
puts("");
puts("-----------------------------------------");
puts("Matriks Enkripsi");
cetak_matrik(MEnkripsi,pesanlen1);
nilaipesan(&pesanEn,MEnkripsi,pesanlen1);
puts("-----------------------------------------");
printf("Enkripsi Pesan : ");
cetak_pesan(pesanEn, pesanlen1-1);
puts("\n-----------------------------------------");
system("pause");
puts("-----------------------------------------");
Dekripsi(MEnkripsi, kunci_angka, pesanlen1, &MDekripsi, &hasilXD);
puts("-----------------------------------------");
puts("Matriks Dekripsi = kunci invers * pesan\n");
cetak_matrik(hasilXD, pesanlen1);
puts("-----------------------------------------");
puts("Matriks Dekripsi\n");
cetak_matrik(MDekripsi, pesanlen1);
puts("");
puts("-----------------------------------------");
printf("\Pesan Dekripsi : ");
nilaipesan(&pesanDe,MDekripsi,pesanlen1);
cetak_pesan(pesanDe, pesanlen);
puts("");
puts("-----------------------------------------");
return 0;
}
Fungsi
#include "header.h"
void nilaikunci(char huruf[], int angka[], int batas){
int i,j;
char karakter[27]=" abcdefghijklmnopqrstuvwxyz";
for(i=0;i<batas;i++){
for(j=0;j<27;j++){
if(huruf[i]==karakter[j]){
angka[i]=j;
}
}
}
}
void nilaipesan(char huruf[], int angka[], int batas){
int i,j;
char karakter[27]=" abcdefghijklmnopqrstuvwxyz";
i=0;
while(i<batas){
for(j=0;j<27;j++){
if(angka[i]==j){
huruf[i]=karakter[j];
}
}
i++;
}
}
void cetak_matrik(int matrik[], int batas){
int i,j;
for(i=0;i<2;i++){
for(j=0;j<batas-1;j++){
if(i==0 && j%2==0){
printf("%d\t",matrik[j]);
}
else if(i==1 && j%2!=0){
printf("%d\t", matrik[j]);
}
}
puts("");
}
}
void cetak_pesan(char pesan[], int batas){
int i=0;
while(i<batas){
printf("%c",pesan[i]);
i++;
}
}
//motubablog.blogspot.com
void Enkripsi(int kunci[], int pesan[], int stop, int MEnkripsi[], int hasilX[]){
int i,j;
hasilX[stop];
int hasilMod[stop];
j=0;
for(i=0;i<stop;i+=2){
hasilX[j]=((kunci[0]*pesan[i])+(kunci[2]*pesan[i+1]));
hasilX[j+1]=((kunci[1]*pesan[i])+(kunci[3]*pesan[i+1]));
j+=2;
}
for(i=0;i<stop;i++){
hasilMod[i]=hasilX[i]%27;
MEnkripsi[i]=hasilMod[i];
}
}
int determinan_kunci(int kunci[]){
return (kunci[0]*kunci[3])-(kunci[1]*kunci[2]);
}
void adjoin(int kunci[], int adjK[]){
int tamp,i;
tamp=kunci[3];
kunci[3]=kunci[0];
kunci[0]=tamp;
kunci[1]*=-1;
kunci[2]*=-1;
for(i=0;i<4;i++){
adjK[i]=kunci[i];
}
}
int rumus_Z(int data){
int i,j;
for (i=1;i<27;i++){
for (j=1;j<27;j++){
if ((i*j)%27==1){
if(i==data){
return j;
}
}
}
}
return 0;
}
int modulo(int angka){
int hasil;
int a=angka;
int b;
if(angka<0 && angka>=-27){
hasil=angka+27;
}
else if(angka<-27){
while(angka<0){;
angka+=27;
}
hasil=angka;
}
else{
hasil=angka%27;
}
return hasil;
}
void Dekripsi(int C[], int kunci[], int stop,int MDekripsi[], int hasilX[]){
int Z,i,j;
int Zinvs;
int adjK[4],Kinvs[4],Kmod[4];
hasilX[stop];
Z=modulo(determinan_kunci(kunci));
printf("Z = %d\n",Z);
Zinvs=rumus_Z(Z);
printf("Z inves %d\n",Zinvs);
adjoin(kunci,&adjK);
for(i=0;i<4;i++){
Kinvs[i]=Zinvs*adjK[i];
Kmod[i]=modulo(Kinvs[i]);
}
j=0;
for(i=0;i<stop;i+=2){
hasilX[j]=((Kmod[0]*C[i])+(Kmod[2]*C[i+1]));
hasilX[j+1]=((Kmod[1]*C[i])+(Kmod[3]*C[i+1]));
j+=2;
}
for(i=0;i<stop;i++){
MDekripsi[i]=modulo(hasilX[i]);
}
}
int cek_kunci(int kunci[]){
int Z,Zinvs;
Z=modulo(determinan_kunci(kunci));
Zinvs=rumus_Z(Z);
if(Zinvs==0){
return 0;
}
else{
return 1;
}
}
Header
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
//prototype fungsi
//motubablog.blogspot.com
void nilaikunci(char huruf[], int angka[], int batas);
void nilaipesan(char huruf[], int angka[], int batas);
void cetak_matrik(int matrik[], int batas);
void cetak_pesan(char pesan[], int batas);
void Enkripsi(int kunci[], int pesan[], int stop, int MEnkripsi[], int hasilX[]);
void adjoin(int kunci[], int adjK[]);
void Dekripsi(int C[], int kunci[], int stop,int MDekripsi[], int hasilX[]);
#endif // HEADER_H_INCLUDED
Hasil Run Program
Nah bagaimana apakah sesuai dengan yang kalian inginkan? Konsep dari Hill Cipher sebenarnya sangat mudah, hanya saja ketika kita ingin membuatnya dalam bentuk coding pasti sedikit merepotkan.
Baca Juga: Program Bahasa C Kasir Warung Makan Paling Sederhana
Sekian Source Code Hill Cipher Bahasa C yang saya berikan semoga bermanfaat bagi pembelajaran kalian. Ingat! Gunakan dengan bijak.
Terima kasih sebelumnya cuma saran aja coba di kasih pengertian untuk source code nya biar lebih mudah mengerti tentang source code nya
ردحذفhehe iya gan, ini tugas akhir mata kuliah Otomata dan teori bahasa saya, susah kalo dijabarin kalo dijabarin dalam teks gan
حذفcara ngubah string ke number yg ga acak pake sistem ini gimna mas?
ردحذفitu kan string to integernya dibuat pake looping, jadi ya ga ngacak sbenernya
حذف