Laporan Kriptografi Playfair
-
Upload
sand-dhyie -
Category
Documents
-
view
128 -
download
0
description
Transcript of Laporan Kriptografi Playfair
1 | K r i p t o g r a f i | P l a y f a i r
KRIPTOGRAFI
Plalyfair
Disusun oleh:
Sandhi Yani Zulqifli 24010310141038
PROGRAM STUDI TEKNIK INFORMATIKA – R2
JURUSAN MATEMATIKA
FAKULTAS MATEMATIKA ILMU PENGETAHUAN ALAM
UNIVERSITAS DIPONEGORO
SEMARANG
2012
2 | K r i p t o g r a f i | P l a y f a i r
DAFTAR ISI
DAFTAR ISI …………………………………………………………………………… 2
BAB I PENDAHULUAN ……………………………………………………………… 3
Rumusan Masalah ……………………………………………………………… 4
Tujuan ………………………………………………………………………….. 4
BAB II PEMBAHASAN ………………………………………………………………. 5
BAB III PENUTUP …………………………………………………………………… 17
3 | K r i p t o g r a f i | P l a y f a i r
BAB I PENDAHULUAN
Kriptografi adalah ilmu yang mempelajari kerahasiaan berita, dalam hal ini adalah
kerahasiaan sebaris huruf atau lebih yang di rahasiakan dengan melakukan Enkripsi dengan
menggunakan kunci tertentu, kunci ini dapat bermacam-macam bentuk, misalkan kata SAYA
bila di enkripsi dapat menjadi BHWZ atau SDJK menyesuaikan dengan kunci apa yang di
gunakan dalam melakukan enkripsi tersebut. Selain metode Enkripsi ada juga kebalikannya
yaitu Dekripsi, Dekripsi ini adalah kebalikan dari Enkripsi yaitu merubah kata / huruf /
kalimat yang telah di kodekan menjadi sebuah kata / huruf / kalimat yang readable ( mudah
di baca ).
Ada empat tujuan mendasar dari ilmu kriptografi ini yang juga merupakan aspek keamanan
informasi yaitu :
Kerahasiaan, adalah layanan yang digunakan untuk menjaga isi dari informasi dari
siapapun kecuali yang memiliki otoritas atau kunci rahasia untuk membuka/mengupas
informasi yang telah disandi.
Integritas data, adalah berhubungan dengan penjagaan dari perubahan data secara tidak
sah. Untuk menjaga integritas data, sistem harus memiliki kemampuan untuk mendeteksi
manipulasi data oleh pihak-pihak yang tidak berhak, antara lain penyisipan, penghapusan,
dan pensubsitusian data lain kedalam data yang sebenarnya.
Autentikasi, adalah berhubungan dengan identifikasi/pengenalan, baik secara kesatuan
sistem maupun informasi itu sendiri. Dua pihak yang saling berkomunikasi harus saling
memperkenalkan diri. Informasi yang dikirimkan melalui kanal harus diautentikasi
keaslian, isi datanya, waktu pengiriman, dan lain-lain.
Non-repudiasi., atau nirpenyangkalan adalah usaha untuk mencegah terjadinya
penyangkalan terhadap pengiriman/terciptanya suatu informasi oleh yang
mengirimkan/membuat.
4 | K r i p t o g r a f i | P l a y f a i r
Rumusan Masalah o Bagaimana membuat suatu program Playfair dengan menggunakan Bahasa C
Tujuan o Membuat suatu Program Enkripsi / Dekripsi dengan metode Playfair
menggunakan Bahasa C
5 | K r i p t o g r a f i | P l a y f a i r
BAB II
PEMBAHASAN
Sandi Playfair adalah salah satu teknik kriptografi. Dalam teknik
ini pesan dienkripsi berdasarkan pasangan huruf, bukan huruf tunggal seperti sandi
klasik lainnya. Sandi Playfair ditemukan
olehahli Fisika berkebangsaan Inggris bernama Sir Charles Wheatstone (1802 -
1875) namun dipromosikan oleh Baron Lyon Playfair (1819 - 1898) pada tahun 1854.
Dibandingkan dengan sandi-sandi lainnya, sandi Playfair dapat meningkatan keamanan
dalam pengiriman sebuah pesan rahasia sehingga dapat memberikan
jaminan integritas data serta menjaga kerahasiaan. Sandi Playfairpertama kali
digunakan untuk tujuan-tujuan taktis oleh pasukan Inggris dalam Perang Boer
II dan Perang Dunia I. Australia dan Jerman juga menggunakan sandi ini untuk tujuan
yang sama dalamPerang Dunia II. Sandi Playfair paling sering digunakan karena
penggunaannya yang sangat sederhana dan tidak memerlukan peralatan khusus untuk
membaca atau menerjemahkan suatu sandi yang bersifat rahasia. Pada perkembangan
selanjutnya, sandi ini tidak lagi digunakan oleh pasukan militer karena telah muncul
berbagai perangkat enkripsi digital untuk menerjemahkannya. Sandi Playfair dianggap
tidak aman lagi untuk menjaga suatu kerahasiaan pesan
karena komputer dengan piranti lunak tertentu dapat memecahkan suatu sandi dalam
hitungan detik.
Sandi Playfair menggunakan 25 huruf sebagai kunci yang disusun dalam bujur
sangkar dengan menghilangkan huruf J dari abjad. Susunan kunci di dalam bujur
sangkar tersebut diperluas dengan menambahkan kolom keenam dan baris keenam.
7 | K r i p t o g r a f i | P l a y f a i r
Memasukkan kata kunci “mahasiswa”
Ini adalah hasil dari enkripsi
8 | K r i p t o g r a f i | P l a y f a i r
Ini adalah hasil dari dekripsinya
Source Code
#include<stdio.h>
#include<conio.h>
#include<string.h>
/*kamus global*/
char plain[100], key[10], cipher[100], a[5][5], rf[100];
int l, flag=0, i, j, row=0, col=0, x, y;
int tampilan ();
/*menampilkan interface yang berisi tampilan awal*/
int pilih(int);
/*memanggil fungsi berdasarkan pilihan*/
void tampilanKey ();
/*
I.S : key belum ada
F.S : key terisi dengan inputan user
proses : menginput key yg diberikan user ke dalam matriks key
*/
9 | K r i p t o g r a f i | P l a y f a i r
int enkripsi(char[], char[]);
/*merubah plain teks menjadi cipher teks berdasarkan key*/
int dekripsi(char[], char[]);
/*merubah cipher teks menjadi plain teks berdasarkan key*/
int main()
{
/*kamus*/
int c;
/*algoritma*/
tampilan();
printf("masukkan pilihan anda: \n");
scanf("%d", &c);
if (c<1 || c>3) {
printf("masukkan pilihan yang tepat \n");
}
pilih(c);
}
/*body / realisasi fungsi*/
int tampilan (){
/*menampilkan interface yang berisi tampilan awal*/
/*kamus lokal*/
/*algoritma*/
printf("\n------------------------------------------------------\n");
printf("Program enkripsi & dekripsi menggunakn Playfair cipher\n");
printf("------------------------------------------------------\n");
printf("Anggoro Wicaksono / 24010310120029\n");
printf("------------------------------------------------------\n");
printf("[1] program enkripsi\n");
printf("[2] program dekripsi\n");
printf("[3] keluar\n");
printf("------------------------------------------------------\n");
10 | K r i p t o g r a f i | P l a y f a i r
return 0;
}
int pilih(int c){
/*memanggil fungsi berdasarkan pilihan*/
/*kamus lokal*/
int i;
/*algoritma*/
switch(c) {
case 1: {
fflush(stdin);
printf("masukkan plain teksnya: \n");
gets(plain);
l = strlen(plain);
printf("\nmasukkan key: \n");
gets(key);
for (i=0; i<strlen(key); i++){
if (key[i] == 'j')
key[i] = 'i';
}
for (i=0; cipher[i] != '\0'; i++)
cipher[i]='\0';
printf("\nkey: \n");
tampilanKey();
enkripsi(key, plain);
break;
}
case 2: {
fflush(stdin);
printf("masukkan cipher teksnya: \n");
gets(cipher);
11 | K r i p t o g r a f i | P l a y f a i r
l = strlen(cipher);
printf("\nmasukkan key: \n");
gets(key);
for (i=0; i<strlen(key); i++){
if (key[i] == 'j')
key[i] = 'i';
}
for (i=0; plain[i] != '\0'; i++)
plain[i]='\0';
printf("\nkey: \n");
tampilanKey();
dekripsi(key, cipher);
break;
}
case 3:{
exit(0);
}
}
return c;
}
void tampilanKey (){
/*
I.S : key belum ada
F.S : key terisi dengan inputan user
proses : menginput key yg diberikan user ke dalam matriks key
*/
for(i=0; i<strlen(key); i++){
flag=1;
for (j=0; j<i; j++){
if (key[i]==key[j])
flag=0;
12 | K r i p t o g r a f i | P l a y f a i r
}
if (flag==1){
a[row][col]=key[i];
printf(" %c", a[row][col]);
col++;
if (col==5){
printf("\n");
col=0;
row=row+1;
}
}
}
for (i=0; i<26; i++){
flag=1;
for (j=0; j<strlen(key); j++){
if(key[j]==i+97)
flag=0;
}
if (flag==1 && i!=9){
a[row][col]=i+97;
printf(" %c", a[row][col]);
col++;
if (col==5){
row=row+1;
col=0;
printf("\n");
}
}
}
}
int enkripsi(char key[], char plain[]){
13 | K r i p t o g r a f i | P l a y f a i r
/*merubah plain teks menjadi cipher teks berdasarkan key*/
/*kamus lokal*/
int r1=0,c1=0,r2=0,c2=0,p=0,q=0;
char *tambah="z";
/*algortima*/
if (l%2==1){
strcat(plain, tambah);
}
printf("\nplainteks: %s\n",plain);
printf("\ncipherteks: ");
j=1;
for(i=0;i<strlen(plain)-1;){
x=plain[i];
y=plain[j];
if(x=='j')
plain[i]='i';
if(y=='j')
plain[j]='i';
for(p=0; p<5; p++){
for(q=0; q<5; q++){
if(a[p][q]==x){
r1=p;
c1=q;
}
if(a[p][q]==y){
r2=p;
c2=q;
}
}
}
if(r1==r2){
14 | K r i p t o g r a f i | P l a y f a i r
cipher[i]=a[r1][(c1+1)%5];
cipher[j]=a[r2][(c2+1)%5];
printf("%c%c", cipher[i],cipher[j]);
}
else if(c1==c2){
cipher[i]=a[(r1+1)%5][c1];
cipher[j]=a[(r2+1)%5][c2];
printf("%c%c", cipher[i],cipher[j]);
}
else{
cipher[i]=a[r1][c2];
cipher[j]=a[r2][c1];
printf("%c%c",cipher[i],cipher[j]);
}
i+=2;
j+=2;
}
//printf("\n\ntekan Enter untuk kembali ke menu\n");
getch();
}
int dekripsi(char key[], char chiper[]){
/*merubah cipher teks menjadi plain teks berdasarkan key*/
/*kamus*/
int r1=0,c1=0,r2=0,c2=0,p=0,q=0;
/*algoritma*/
printf("\ncipherteks: %s\n",cipher);
printf("\nplainteks: ");
j=1;
for(i=0;i<strlen(cipher)-1;){
x=cipher[i];
y=cipher[j];
if(x=='j')
15 | K r i p t o g r a f i | P l a y f a i r
cipher[i]='i';
if(y=='j')
cipher[j]='i';
for(p=0; p<5 ;p++){
for(q=0; q<5; q++){
if(a[p][q]==x){
r1=p;
c1=q;
}
if (a[p][q]==y){
r2=p;
c2=q;
}
}
}
if(r1==r2){
rf[i]=a[r1][(c1-1)%5];
rf[j]=a[r2][(c2-1)%5];
printf("%c%c",rf[i],rf[j]);
}
else if(c1==c2){
rf[i]=a[(r1-1)%5][c1];
rf[j]=a[(r2-1)%5][c2];
printf("%c%c",rf[i],rf[j]);
}
else{
rf[i]=a[r1][c2];
rf[j]=a[r2][c1];
printf("%c%c",rf[i],rf[j]);
}
i+=2;
16 | K r i p t o g r a f i | P l a y f a i r
j+=2;
}
//printf("\n\ntekan Enter untuk kembali ke menu\n");
getch();
}
17 | K r i p t o g r a f i | P l a y f a i r
BAB III PENUTUP
Playfair adalah metode enkripsi / dekripsi yang lebih kuat dan robush jika di
bandingkan dengan metode cipher teks, dalam program di atas kita melihat bahwa dengan
menggunakan metode ini kita bisa mendapatkan hasil enkripsi yang kuat dan mempunyai
kemungkinan untuk di pecahkan sangat susah.