!"# $ $
% & ' ( !"# )
-.
/
!"# +
0 &
% ' ( 0 !"# * )
& * $ *
-" * / *
& ! ,
, $+.2 . !
3 ! ( ( 1
3 ! 2 & ! 1
3 ! &+4 *
& & ( $+. 5646 . 7
7 7 4 & 7
7 # ( #
7 8 #
7 9 $ #
7 : $ #
& & (( +/!( $+.6.; .2 9
# 7 , , , 9
# 7 7 , 9
# 7 # + :
# 7 8 , <
# 7 8 7 %
# 7 8 # , $ =
# #$ >
# 8 77
# 8 7 & $ 77
# 8 # / 7#
# 8 8 + 7#
# 8 9 +* + 78
# 8 : + 79
# 8 < 3 ?/! 7:
# : - 7%
# < 7%
# < 7 $ , 7=
# < # 7>
# < 8 - #A
& & ((( ( $4+ +. ( . !+ 4( ( $+! .2, 46. , #A
8 7 $ $ #7
8 # & 6 #8
8 # 7 $ ( !"# #8
8 # # $ + $ * #9
8 # 8 $ $ , #:
8 # 8 7 $ # #%
8 # 8 # $ #%
8 # 9 $ - #>
8 # 9 7 $ $ 8A
8 # 9 # $ & 87
8 # : $ " * 87
8 # < $ / * 88
8 # % $ 89
& & (- 5 (4 $+.2 . 8<
9 7 5 $ 8<
9 7 7 5 $ 7 8<
9 7 # 5 $ # 8%
9 7 8 5 $ 8 8%
9 7 8 7 5 $ 7 8%
9 7 8 # 5 $ # 8=
9 7 9 5 $ 9 8>
9 7 9 7 $ 7 8>
9 7 9 7 $ # 8>
9 7 % 5 $ % 98
9 7 % 7$ 98
9 7 % #$ * 98
9 7 % 8$ * 99
9 7 % 9$ * 99
9 7 % :$ $ $ 1 9:
9 # 5 $ 9:
& & - ,+ ( $64 . . ! . 9%
: 7 , 9%
: # 9%
3 ! $6 , 9=
4 $(! . !$!/2! )7
2 # 7 & + <
2 # # & <
2 # 8 & + , %
2 # 9 & , %
2 # : & =
2 # < & + $ , $ >
2 # % & $ , $ >
2 8 7 $ $ #7
2 8 # $ ( !"# #8
2 8 8 $ + $ * #9
2 8 9 $ $ , #:
2 8 : $ #<
2 8 < $ #%
2 8 % $ - #=
2 8 = $ $ #>
2 8 > $ & 8A
2 8 7A $ " * 87
2 8 77 $ " * 88
2 8 7# $ $
# 7 . +* + 78
9 7 5 $ , 8:
9 # 5 $ , $ * & 8<
9 8 5 $ 6 3 " * $ * B
& , 8=
9 : 9 9 5 $ 6 3 " *
$ * B & , & ) 8=
9 : 5 $ 6 3 " * $ * B
LAMPIRAN A
LISTING PROGRAM
*Form Main Program (Program Pengaman Data) unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ComCtrls;
type
edPass: TEdit;
OpenDlgEnc: TOpenDialog; SaveDlgEnc: TSaveDialog; SaveDlgV: TSaveDialog; OpenDlgV: TOpenDialog; OpenDlgDec: TOpenDialog; SaveDlgDec: TSaveDialog; RichEdit1: TRichEdit;
procedure Exit1Click(Sender: TObject); procedure btGenClick(Sender: TObject); procedure btEncryptClick(Sender: TObject); procedure btBrowseClick(Sender: TObject); procedure btBrowse1Click(Sender: TObject); procedure btDecryptClick(Sender: TObject); procedure About1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private
{ Private declarations } public
end;
var
Main: TMain;
implementation
uses RC2, RSATools, UAbout;
{$R *.dfm}
procedure TMain.Exit1Click(Sender: TObject); begin
Application.Terminate; end;
procedure TMain.btGenClick(Sender: TObject); var p : Longint; //random prime
q : Longint; //second random prime that not equal to p n : Longint; //p * q
pi : Longint; //(p - 1)(q - 1)
e : Longint; //e that relatively prime to pi but less than pi d : Longint; //d that d*e congruent to 1 mod pi
i1 : Longint; //counter
c : Longint;
temp2 : array of Longint; // temp dynamic array handler that hand selection of e temp3 : Longint;
temp4 : Longint;
temp5 : Longint; // temp handler temp6 : Longint; // temp handler 2 label lagi,ulang;
begin lagi:
p := RdmPrime; q := RdmPrime;
//Trap handler if p = q If p = q Then
GoTo lagi;
n := p * q;
PubN.Text := IntToStr(n);
//random selection of e ulang:
//select e that is prime
var slama:String;
awal,akhir,lama:TDateTime; i,d,n:Integer;
s,x:longint; begin
if edPass.Text = '' then
MessageDlg('Kata Kunci Belum Diisi',mtError,mbOKCancel,0) else
if RPlain.Text = '' then
MessageDlg('Document masih kosong',mtError,mbOKCancel,0) else
if PrivD.Text = '' then
lama:=(akhir-awal)*86000; str(lama:12:8,slama); edDuration.Text:=slama; end;
if Application.MessageBox(' Masukan Nama File Validasi dan Digital Signature' ,' Pesan' ,MB_OK) = IDOK then
begin
edPath1.Text:=OpenDlgDec.FileName; RichEdit1.Clear;
RichEdit1.Lines.LoadFromFile(OpenDlgDec.FileName); end;
edPath.Text:=OpenDlgEnc.FileName; RPlain.Clear;
RPlain.Lines.LoadFromFile(OpenDlgEnc.FileName); end;
procedure TMain.btBrowse1Click(Sender: TObject); begin
if OpenDlgDec.Execute then begin
RCipher.Clear;
RCipher.Lines.LoadFromFile(OpenDlgDec.FileName); edPath1.Text:=OpenDlgDec.FileName;
RCipher.Clear;
RCipher.Lines.LoadFromFile(OpenDlgDec.FileName); end;
awal,akhir,lama:TDateTime; i,e,n:Integer;
s,p:Longint; begin
if edPass1.Text = ' ' then
MessageDlg(' Kata Kunci Belum Diisi' ,mtError,mbOKCancel,0) else
if RCipher.Text = ' ' then
if OpenDlgEnc.Execute then begin
edPath.Text:=OpenDlgEnc.FileName; RichEdit2.Clear;
RichEdit2.Lines.LoadFromFile(OpenDlgEnc.FileName); end;
RPlain.Lines.SaveToFile(ESave.FileName); ShowMessage(' Plain Text telah disimpan dengan nama' +chr(10)+chr(13)+ESave.FileName);
RCipher.Lines.SaveToFile(ESave.FileName); ShowMessage(' Plain Text telah disimpan dengan nama' +chr(10)+chr(13)+ESave.FileName);
end; end;
end.
Listing RC2 enkripsi, dan deskripsi unit rc2;
interface
uses
Classes, Sysutils;
type
function Encrypt(Indata : RC2MsgBlock; Key : String): Rc2MsgBlock; function Decrypt(Indata : RC2MsgBlock; Key : String): Rc2MsgBlock;
implementation {$R-}{$Q-}
{$I RC2.inc}
function LRot16(a, n: word): word; begin
Result:= (a shl n) or (a shr (16-n)); end;
function RRot16(a, n: word): word; begin
Result:= (a shr n) or (a shl (16-n)); end;
Listing enkripsi
function Encrypt(Indata : RC2MsgBlock; Key : String): Rc2MsgBlock; var
i, j: longword;
w: array[0..3] of word; KeyB: array[0..127] of byte; KeyData: array[0..63] of word; size: longword;
KeyB[i]:= sBox[(KeyB[i-(size div 8)]+KeyB[i-1]) and $FF]; KeyB[0]:= sBox[KeyB[0]];
w[1]:= LRot16((w[1]+(w[2] and (not w[0]))+(w[3] and [0])+KeyData[j+1]),2); w[2]:= LRot16((w[2]+(w[3] and (not w[1]))+(w[0] and [1])+KeyData[j+2]),3); w[3]:= LRot16((w[3]+(w[0] and (not w[2]))+(w[1] and [2])+KeyData[j+3]),5); if (i= 4) or (i= 10) then
function Decrypt(Indata : RC2MsgBlock; Key : String): Rc2MsgBlock; var
i, j: longword;
w: array[0..3] of word; KeyB: array[0..127] of byte; KeyData: array[0..63] of word; size: longword;
KeyB[i]:= sBox[(KeyB[i-(size div 8)]+KeyB[i-1]) and $FF]; KeyB[0]:= sBox[KeyB[0]];
w[3]:= RRot16(w[3],5)-(w[0] and (not w[2]))-(w[1] and w[2])-KeyData[j+3]; w[2]:= RRot16(w[2],3)-(w[3] and (not w[1]))-(w[0] and w[1])-KeyData[j+2]; w[1]:= RRot16(w[1],2)-(w[2] and (not w[0]))-(w[3] and w[0])-KeyData[j+1]; w[0]:= RRot16(w[0],1)-(w[1] and (not w[3]))-(w[2] and w[3])-KeyData[j+0]; if (i= 5) or (i= 11) then
w[3]:= w[3]-KeyData[w[2] and 63];
uses SysUtils, StrUtils, IdGlobal, Math;
Function Euclid(nilai1 : Longint; nilai2 : Longint) : Longint ; Function gcd(p : longint; q : longint) : Longint;
Function RdmPrime() : Longint;
Function pangkatmod(num1 : longint;num2 : longint;num3 : longint) : longint;
implementation
end;
Function gcd(p : longint; q : longint) : Longint; var A11,B11,R11 : Longint;
label balik;
Function RdmPrime() : Longint;
iLowerBound := 30; iUpperBound := 300; Randomize;
i110:
iRandom := (Round((iUpperBound - iLowerBound + 1) * (Random(10000)/10000)) + iLowerBound);
Function pangkatmod(num1 : longint;num2 : longint;num3 : longint) : longint; var a22,b22,n22,nilaimod,nilaic,nilaid,nilaii,nilaik,naik : longint;
nilaid := (nilaid * nilaid) Mod n22;
function LRot16(X: word; c: integer): word; assembler; function RRot16(X: word; c: integer): word; assembler; function LRot32(X: dword; c: integer): dword; assembler; function RRot32(X: dword; c: integer): dword; assembler; procedure XorBlock(I1, I2, O1: PByteArray; Len: integer); procedure IncBlock(P: PByteArray; Len: integer);
function StrToDWord(s : string) : DWord; function DWordToStr(wo : DWord) : string;
implementation
function LRot16(X: word; c: integer): word; assembler; asm
mov ecx,&c mov ax,&X rol ax,cl
end;
function RRot16(X: word; c: integer): word; assembler; asm
function LRot32(X: dword; c: integer): dword; register; assembler; asm
mov ecx, edx rol eax, cl end;
function RRot32(X: dword; c: integer): dword; register; assembler; asm
mov ecx, edx ror eax, cl end;
procedure XorBlock(I1, I2, O1: PByteArray; Len: integer); var
procedure IncBlock(P: PByteArray; Len: integer); begin
Inc(P[Len-1]);
if (P[Len-1]= 0) and (Len> 1) then IncBlock(P,Len-1);
end;
cely:=Si1;
function DWordToStr(wo : DWord) : string; var vysl : string;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TfrmAbout = class(TForm) Panel1: TPanel;
Label4: TLabel; Label6: TLabel; Label7: TLabel; Button1: TButton;
procedure Button1Click(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
var
frmAbout: TfrmAbout;
implementation
{$R *.dfm}
procedure TfrmAbout.Button1Click(Sender: TObject); begin
frmAbout.Close; end;
LAMPIRAN B
TAMPILAN PROGRAM PENGAMAN DATA
BAB I
PENDAHULUAN
Pada bab ini akan dijelaskan mengenai latar belakang, perumusan masalah,
tujuan, pembatasan masalah, serta sistematika penulisan laporan tugas akhir.
1.1 Latar Belakang
Pada era komunikasi sekarang ini keamanan data sangatlah diperlukan
untuk menjamin keutuhan nilai informasi yang dipertukarkan. Suatu informasi
akan berkurang nilai informasinya atau hilang nilainya apabila dalam
pengirimannya disadap atau dibajak oleh pihak yang tidak dikehendaki. Internet
sebagai salah satu media pertukaran informasi sangat rawan dalam
mempertahankan nilai suatu informasi, sehingga sangatlah penting dibutuhkannya
proteksi informasi untuk memastikan kerahasiaan (confidentiality), keutuhan
(integrity), keabsahan (authenticity), dan keaslian (originality) informasi tersebut. Salah satu cara untuk mengatasi masalah ini ialah dengan mengkodekan
informasi (data) tersebut menjadi data yang tidak bisa dibaca atau dimengerti oleh
pihak lain tetapi bisa dibaca oleh pihak pengirim dan penerima. Kriptografi adalah
metoda yang mempelajari proteksi data dengan cara mengkodekannya. Metoda
proteksi ini menggunakan berbagai teknik metoda matematis untuk
mengkodekannya. Kriptografi bisa dibagi menjadi 2 model yaitu model
pengkodean simetri dan model pengkodean publik (asimetri). Pengkodean simetri
dibagi 2 yaitu pengkodean blok dan pengkodean stream. Masing-masing model pengkodean mempunyai algoritma pengkodean lebih dari satu. Penggunaan
pengkodean simetris maupun publik mempunyai kelemahan dan keunggulan
masing-masing. Pemakaiannya tergantung dari situasinya.
Dari sekian banyak algoritma pengkodean, salah satunya yaitu algoritma
RC2 alogaritma ini merupakan salah satu generasi awal sebelum alogaritma RC4
maupun RC6, alogaritma ini bersifat simentris artinya kunci untuk mengenkripsi
2
mulai banyak ditembus oleh para hacker. RC2 dirancang oleh Ron Rivest di tahun
1987. "RC" singkatan dari "Ron's Code" atau "Rivest Cipher", RC2 akan bisa ditembus dengan 234 kali percobaan.
1.2 Identifikasi Masalah
1. Bagaimana algoritma kunci simetri dengan metoda RC2 dapat dijadikan suatu
pengaman data ?
2. Bagaimana realisasi software menggunakan metoda RC2 ?
1.3 Tujuan
1. Merealisasikan suatu software dari suatu pengamanan data dengan teknik enkripsi RC2.
1.4 Pembatasan Masalah
Menggunakan bahasa pemprograman Borland Delphi untuk membuat
program enkripsi dan dekripsi dengan algoritma RC2. Tidak membahas mengenai
transmisi data. Data masukan berupa teks dan file teks (*.txt)
1.5 Sistematika Pembahasan
BAB I PENDAHULUAN
Menjelaskan mengenai latar belakang pembuatan tugas akhir, identifikasi
masalah, tujuan, pembatasan masalah dan sistematika pembahasan.
BAB II TEORI PENUNJANG
Menjelaskan kriptografi secara umum serta algoritma-algoritma yang
menunjang pembuatan tugas akhir seperti algoritma simetrik, algoritma kunci
publik, algoritma euclidean
BAB III IMPLEMENTASI DAN REALISASI PERANGKAT LUNAK
3
BAB IV HASIL PENGAMATAN
Membahas hasil pengamatan yang diperoleh berdasarkan implementasi
dan realisasi perangkat lunak dari metode enkripsi simetris RC2
BAB V KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan yang diperoleh dari hasil pengamatan dan
BAB V
KESIMPULAN DAN SARAN
5.1 KESIMPULAN
Kesimpulan dari tugas akhir adalah sebagai berikut :
1. Perangkat lunak pengaman data dengan algoritma RC2 telah berhasil
direalisasikan.
2. Pada program yang dibuat untuk enkripsi RC2 didapatkan 1 – 8 karakter
akan mejadi 8 karakter ciphertext, 9 – 16 karakter akan menjadi 16
karakter ciphertext dan seterusnya.
3. Pada algoritma RC2 besarnya secret key / password dan plaintext atau
ciphertext mempengaruhi waktu pemprosesan pada waktu enkripsi dan
dekripsi. Password semakin sedikit mempunyai pengulangan karakter atau
kata maka waktu enkripsi semakin lama
4. Perangkat lunak yang direalisasikan telah memenuhi komponen utama
kriptografi yaitu kerahasiaan, keutuhan, keaslian dan keabsahan
5.2 SARAN
Saran-saran yang dapat digunakan untuk pengembangan lebih lanjut dari
program pengaman data adalah :
1. Program perangkat lunak pengaman data dapat dikembangkan untuk
memproses data selain *.txt, misalnya data teks lainnya (*.doc, *.rtf), data
grafik (image) (*.bmp, *.jpg, *.png), data lainnya (*.exe, *.dat, *.html).
2. Kerahasiaan file bisa lebih dijaga dengan menggunakan metode kompresi
data sebelum dienkripsi sekaligus mengurangi ukuran file yang dienkripsi.
3. Nilai kunci yang lebih besar dengan jumlah bit yang lebih banyak akan