Anda di halaman 1dari 26

72

BAB IV
ALGORITMA DAN IMPLEMENTASI
4.1

Algoritma
Algoritma perancangan perangkat lunak pembelajaran kriptografi metoda

GOST dibagi menjadi 4 bagian yaitu,


1. Algoritma Proses Pembentukan Kunci.
2. Algoritma Proses Enkripsi.
3. Algoritma Proses Dekripsi.
4. Algoritma Tampilan Proses Pembentukan Kunci.
5. Algoritma Tampilan Proses Enkripsi dan Dekripsi.

4.1.1

Algoritma Proses Pembentukan Kunci


Algoritma ini digunakan dalam proses enkripsi dan dekripsi, maka penulis

merancang algoritma ini di dalam fungsi proses enkripsi dan dekripsi. Berikut
merupakan algoritma proses pembentukan kunci :
'---------------------------'
PEMBENTUKAN KUNCI
'---------------------------' *** Ubah kunci menjadi biner *** - 256 bit
cKey1 = ""
For I = 1 To Len(pcKey)
Key1 = cKey1 & FormatStr(FDecToBiner(Asc(Mid(pcKey, I,
1))),"0", 8)
Next I
' *** Kelompokkan biner kunci ke array K *** - @32 bit
For I = 0 To 7
K(I) = FReverse(Mid(cKey1, (32 * I) + 1, 32))
Next I

73

4.1.2

Algoritma Proses Enkripsi


Penulis merancang algoritma ini dalam bentuk fungsi yang memiliki dua

parameter, yaitu plain text dan kunci yang digunakan dalam proses enkripsi. Fungsi
ini mengembalikan cipher text yang telah dienkripsi dengan metoda GOST. Penulis
menggabungkan algoritma pembentukan kunci di dalam algoritma enkripsi.
Berikut merupakan algoritma proses enkripsi,
'Fungsi Enkripsi Metoda GOST
Private Function GOSTEncrypt(pcText As String, pcKey As String) As
String
'---------------------------'
VALIDASI
'---------------------------If Len(pcText) <> 8 Then
MsgBox "Plain text harus 8 karakter !", vbCritical
GOSTEncrypt = ""
Exit Function
End If
If Len(pcKey) <> 32 Then
MsgBox "Kunci encrypt harus 32 karakter !", vbCritical
GOSTEncrypt = ""
Exit Function
End If
'---------------------------'
PROSES ENKRIPSI
'---------------------------' *** SBox-0 ***
SBox(0) = Array(4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15,
5, 3)
' *** SBox-1 ***
SBox(1) = Array(14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7,
5, 9)
' *** SBox-2 ***
SBox(2) = Array(5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0,
9, 11)
' *** SBox-3 ***
SBox(3) = Array(7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2,
5, 3)

74

' *** SBox-4 ***


SBox(4) = Array(6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3,
11, 2)
' *** SBox-5 ***
SBox(5) = Array(4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12,
15, 14)
' *** SBox-6 ***
SBox(6) = Array(13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8,
2, 12)
' *** SBox-7 ***
SBox(7) = Array(1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11,
8, 12)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' 01. LANGKAH 1 - Isi R(0) dan L(0)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' *** Ubah plain text menjadi biner *** - 64 bit
cText1 = ""
For I = 1 To Len(pcText)
cText1 = cText1 & FormatStr(FDecToBiner(Asc(Mid(pcText, I,
1))), "0", 8)
Next I
cTextB1 = cText1
'Bagi menjadi dua bagian - @32 bit
R(0) = FReverse(Mid(cText1, 1, 32))
L(0) = FReverse(Mid(cText1, 33, 64))
For I = 0 To 31
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' 02. LANGKAH 2 - (Ri + Ki) mod 2^32
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*nTemp1 = FBinerToDec(R(I))
'R(i)
If I < 24 Then
'Putaran 0 - 23
nTemp2 = FBinerToDec(K(I Mod 8))
'K(i)
Else
'Putaran 24 - 31
nTemp2 = FBinerToDec(K(7 - (I Mod 8))) 'K(i)
End If
' Hasil = (R(i) + K(i)) mod 2^32
nTemp = FMod(nTemp1 + nTemp2, 2 ^ 32)
cTemp = FormatStr(FDecToBiner(nTemp), "0", 32)

75

'Simpan ke CM1
CM1(I) = cTemp
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' 03. Hasil dari langkah 2 dibagi menjadi 8 kelompok @4bit dan
' dimasukkkan ke SBox sesuai dengan posisi dan nilai dari masing2
' kelompok
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*'Pecah menjadi 8 kelompok @4bit
For J = 4 To (Len(cTemp)) Step 4
nTemp = (J / 4) - 1
'Posisi kelompok
ReDim Preserve ArrcTemp(nTemp)
ArrcTemp(nTemp) = Mid(cTemp, (J - 3), 4)
Next J
'Masukkan ke S-Box
For J = 0 To UBound(ArrcTemp)
'Biner ke desimal
nTemp1 = FBinerToDec(ArrcTemp(J))
'Fungsi S-Box
nTemp2 = SBox(J)(nTemp1)
'Kembalikan hasil SBox
ArrcTemp(J) = FormatStr(FDecToBiner(nTemp2), "0", 4)
Next J
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 04. Hasil dari langkah 3 digabung kembali menjadi 32 bit
'
dan dilakukan rotasi Left Shift sebanyak 11 bit
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'Gabung menjadi 32 bit
cTemp = ""
For J = 0 To UBound(ArrcTemp)
cTemp = cTemp & ArrcTemp(J)
Next J
'Simpan ke SBox
S(I) = cTemp
'Rotasi Left Shift sebanyak 11 bit
cTemp = FRotateLeftShift(cTemp, 11)
'Simpan ke RSL
RSL(I) = cTemp

76

'--------------- LANGKAH 5 & 6 UNTUK 32 PUTARAN ------------------If I <> 31 Then


'-------------'PUTARAN 0 - 30
'-------------'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 05. R(i+1) = R(i) XOR L(i)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
R(I + 1) = FXORBiner(cTemp, L(I), 32)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 06. L(i+1) = R(i) sblm proses
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
L(I + 1) = R(I)
Else

'---------------------'PUTARAN 31 - TERAKHIR
'---------------------'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 05. R(i+1) = R(i) sblm proses
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
R(I + 1) = R(I)

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 06. L(i+1) = R(i) XOR L(i)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
L(I + 1) = FXORBiner(cTemp, L(I), 32)
End If
Next I
cHasilEnkripsi = ""
cTextB2 = ""
'Hasil Enkripsi dari R(32)
cTemp1 = FReverse(R(32))
For I = 8 To 32 Step 8
nTemp = (J / 8)
cTextB2 = cTextB2 & Mid(cTemp1, I - 7, 8)
cHasilEnkripsi = cHasilEnkripsi &
Chr(FBinerToDec(Mid(cTemp1, I - 7, 8)))
Next I
'Hasil Enkripsi dari L(32)
cTemp1 = FReverse(L(32))
For I = 8 To 32 Step 8
nTemp = (J / 8)
cTextB2 = cTextB2 & Mid(cTemp1, I - 7, 8)
cHasilEnkripsi = cHasilEnkripsi &

77

Chr(FBinerToDec(Mid(cTemp1, I - 7, 8)))
Next I
'Hasil Enkripsi Akhir
GOSTEncrypt = cHasilEnkripsi
End Function

4.1.3

Algoritma Proses Dekripsi


Penulis merancang algoritma ini dalam bentuk fungsi yang memiliki dua

parameter, yaitu cipher text dan kunci yang digunakan dalam proses dekripsi. Fungsi
ini mengembalikan plain text yang telah didekripsi dengan metoda GOST.
Berikut merupakan algoritma proses dekripsi,
'Fungsi Dekripsi Metoda GOST
Private Function GOSTDecrypt(pcText As String, pcKey As String) As
String
'---------------------------'
VALIDASI
'---------------------------If Len(pcText) <> 8 Then
MsgBox "Plain text harus 8 karakter !", vbCritical
GOSTDecrypt = ""
Exit Function
End If
If Len(pcKey) <> 32 Then
MsgBox "Kunci decrypt harus 32 karakter !", vbCritical
GOSTDecrypt = ""
Exit Function
End If
'---------------------------'
PROSES DEKRIPSI
'---------------------------' *** SBox-0 ***
SBox(0) = Array(4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15,
5, 3)
' *** SBox-1 ***
SBox(1) = Array(14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7,
5, 9)

78

' *** SBox-2 ***


SBox(2) = Array(5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0,
9, 11)
' *** SBox-3 ***
SBox(3) = Array(7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2,
5, 3)
' *** SBox-4 ***
SBox(4) = Array(6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3,
11, 2)
' *** SBox-5 ***
SBox(5) = Array(4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12,
15, 14)
' *** SBox-6 ***
SBox(6) = Array(13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8,
2, 12)
' *** SBox-7 ***
SBox(7) = Array(1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11,
8, 12)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' 01. LANGKAH 1 - Isi R(0) dan L(0)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' *** Ubah plain text menjadi biner *** - 64 bit
cText1 = ""
For I = 1 To Len(pcText)
cText1 = cText1 & FormatStr(FDecToBiner(Asc(Mid(pcText, I,
1))), "0", 8)
Next I
cTextB1 = cText1
'Bagi menjadi dua bagian - @32 bit
R(0) = FReverse(Mid(cText1, 1, 32))
L(0) = FReverse(Mid(cText1, 33, 64))
For I = 0 To 31
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' 02. LANGKAH 2 - (Ri + Ki) mod 2^32
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*nTemp1 = FBinerToDec(R(I))
'R(i)
If I < 8 Then
'Putaran 0 - 7
nTemp2 = FBinerToDec(K(I Mod 8))
Else

'K(i)

79

'Putaran 8 - 31
nTemp2 = FBinerToDec(K(7 - (I Mod 8)))
End If

'K(i)

' Hasil = (R(i) + K(i)) mod 2^32


nTemp = FMod(nTemp1 + nTemp2, 2 ^ 32)
cTemp = FormatStr(FDecToBiner(nTemp), "0", 32)
'Simpan ke CM1
CM1(I) = cTemp
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*' 03. Hasil dari langkah 2 dibagi menjadi 8 kelompok @4bit dan
' dimasukkkan ke SBox sesuai dengan posisi dan nilai dari masing2
' kelompok
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*'Pecah menjadi 8 kelompok @4bit
ReDim ArrcTemp(0)
For J = 4 To (Len(cTemp)) Step 4
nTemp = (J / 4) - 1
'Posisi kelompok
ReDim Preserve ArrcTemp(nTemp)
ArrcTemp(nTemp) = Mid(cTemp, (J - 3), 4)
Next J
'Masukkan ke S-Box
For J = 0 To UBound(ArrcTemp)
'Biner ke desimal
nTemp1 = FBinerToDec(ArrcTemp(J))
'Fungsi S-Box
nTemp2 = SBox(J)(nTemp1)
'Kembalikan hasil SBox
ArrcTemp(J) = FormatStr(FDecToBiner(nTemp2), "0", 4)
Next J
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 04. Hasil dari langkah 3 digabung kembali menjadi 32 bit
'
dan dilakukan rotasi Left Shift sebanyak 11 bit
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
'Gabung menjadi 32 bit
cTemp = ""
For J = 0 To UBound(ArrcTemp)
cTemp = cTemp & ArrcTemp(J)
Next J
'Simpan ke S
S(I) = cTemp

80

'Rotasi Left Shift sebanyak 11 bit


cTemp = FRotateLeftShift(cTemp, 11)
'Simpan ke RSL
RSL(I) = cTemp
'---------------- LANGKAH 5 & 6 UNTUK 32 PUTARAN ------------------If I <> 31 Then
'-------------'PUTARAN 0 - 30
'-------------'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 05. R(i+1) = R(i) XOR L(i)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
R(I + 1) = FXORBiner(cTemp, L(I), 32)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 06. L(i+1) = R(i) sblm proses
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
L(I + 1) = R(I)
Else
'---------------------'PUTARAN 31 - TERAKHIR
'---------------------'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 05. R(i+1) = R(i) sblm proses
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
R(I + 1) = R(I)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 06. L(i+1) = R(i) XOR L(i)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
L(I + 1) = FXORBiner(cTemp, L(I), 32)
End If
Next I
cHasilDekripsi = ""
'Hasil Dekripsi dari R(32)
cTextB2 = ""
cTemp1 = FReverse(R(32))
For I = 8 To 32 Step 8
nTemp = (J / 8)
cTextB2 = cTextB2 & Mid(cTemp1, I - 7, 8)
cHasilDekripsi = cHasilDekripsi &
Chr(FBinerToDec(Mid(cTemp1, I - 7, 8)))
Next I
'Hasil Enkripsi dari L(32)
cTemp1 = FReverse(L(32))

81

For I = 8 To 32 Step 8
nTemp = (J / 8)
cTextB2 = cTextB2 & Mid(cTemp1, I - 7, 8)
cHasilDekripsi = cHasilDekripsi &
Chr(FBinerToDec(Mid(cTemp1, I - 7, 8)))
Next I
'Hasil Dekripsi Akhir
GOSTDecrypt = cHasilDekripsi
End Function

4.1.4

Algoritma Tampilan Proses Pembentukan Kunci


Algoritma ini menampilkan prosedur pembentukan kunci pada metoda GOST.

Cara kerja algoritma ini adalah sebagai berikut,


Private Sub BentukKunci()
txtEksekusi.Text = vbCrLf & " 1. KUNCI = '" & strKey & "'"
txtEksekusi.Text = txtEksekusi.Text & vbCrLf & vbCrLf & " 2.
Ubah kunci ke bentuk biner."
'02. Panjang kunci = 32 karakter -> ganti jadi ascii
cKey1 = ""
For I = 1 To 32
'Karakter ke - i
cKarakter = Mid(strKey, I, 1)
'Bentuk biner
cKey2 = FormatStr(FDecToBiner(Asc(cKarakter)), "0", 8)
cKey1 = cKey1 & cKey2
'Hasil Eksekusi
txtEksekusi.Text = txtEksekusi.Text & vbCrLf & "
'" &
cKarakter & "' = " & _
FormatStr(Asc(cKarakter), " ", 3) & " = "
& cKey2
'Tampilkan heksa
If bBiner = False Then
txtEksekusi = txtEksekusi.Text & " = " &
GetBentukP(cKey2, bBiner)
End If
Next I
txtEksekusi.Text = txtEksekusi.Text & vbCrLf & vbCrLf & _
"
Hasil konversi kunci ke bentuk biner =

82

(k(1), k(2), k(3), ... , k(256)) = " & vbCrLf & _


"
" & Left(cKey1, 82) & vbCrLf & _
"
" & Mid(cKey1, 83, 82) & vbCrLf & _
"
" & Mid(cKey1, 165, 82) & vbCrLf & "
" &
Right(cKey1, 10)
'Tampilkan heksa
If bBiner = False Then
txtEksekusi = txtEksekusi.Text & " = " & GetBentukP(cKey1,
bBiner)
End If
'03. KUNCI - K(0) - K(7)
txtEksekusi.Text = txtEksekusi.Text & vbCrLf & vbCrLf & _
" 3. Kelompokkan hasil yang didapat pada K(0) - K(7)"
For I = 0 To 7
'Kunci K(I)
J = (32 * I) + 1
cKey2 = FReverse(Mid(cKey1, J, 32))
txtEksekusi.Text = txtEksekusi.Text & vbCrLf & _
"
K(" & I & ") = k(" & FormatStr(J +
31, " ", 3) & "), " & _
"... , k(" & FormatStr(J, " ", 3) & ") =
" & cKey2
'Tampilkan heksa
If bBiner = False Then
txtEksekusi = txtEksekusi.Text & " = " &
GetBentukP(cKey2, bBiner)
End If
Next I
'04. KUNCI - K(0) - K(7)
txtEksekusi.Text = txtEksekusi.Text & vbCrLf & vbCrLf & _
" 4. Kunci K(0) - K(7) akan digunakan dalam
proses enkripsi dan dekripsi." & vbCrLf & vbCrLf & _
"
PROSES ENKRIPSI -> Putaran 0 - 7 : K(0),
K(1), K(2), ... , K(7) " & vbCrLf & _
"
Putaran 8 - 15 : K(0),
K(1), K(2), ... , K(7) " & vbCrLf & _
"
Putaran 16 - 23 : K(0),
K(1), K(2), ... , K(7) " & vbCrLf & _
"
Putaran 24 - 31 : K(7),
K(6), K(5), ... , K(0) " & vbCrLf & vbCrLf & _
"
PROSES DEKRIPSI -> Putaran 0 - 7 : K(0),
K(1), K(2), ... , K(7) " & vbCrLf & _
"
Putaran 8 - 15 : K(7),
K(6), K(5), ... , K(0) " & vbCrLf & _
"
Putaran 16 - 23 : K(7),
K(6), K(5), ... , K(0) " & vbCrLf & _
"
Putaran 24 - 31 : K(7),
K(6), K(5), ... , K(0) "

83

End Sub

4.1.5

Algoritma Tampilan Proses Enkripsi dan Dekripsi


Algoritma ini menampilkan prosedur proses enkripsi dan dekripsi pada

metoda GOST. Cara kerja algoritma ini adalah sebagai berikut,


Private Sub cmdPlay_Click()
If cmdPlay.Caption = "&PLAY" Then
'PLAY
bPause = False
bResume = True
'*-*-*-*-*-*-*- LOOPING
While (bPause = False) And bResume
'Text di awal
If nLangkah2 = 1 Then
'Hasil Eksekusi
txtHasil.Text = IIf(nLangkah1 = 0, "", txtHasil.Text
&
vbCrLf & vbCrLf) & _
"--------------------------------------------" & vbCrLf & _
"
PROSES " & cTipeProses & " - PUTARAN " & nLangkah1
& vbCrLf & "--------------------------------------------"
End If
'****************** STARTS *******************
'Pict - Skema
If nLangkah1 = 0 Then
nPict = 1
ElseIf nLangkah1 = 31 Then
nPict = 3
Else
nPict = 2
End If
'Load picture
PictSkema.Picture = LoadPicture(App.Path &
"\Images\Skema_" & nPict & "_" & nLangkah2 & ".gif")

'*- Grid Algoritma -*


If nLangkah1 = 0 Then
Select Case nLangkah2
Case 1 'Langkah - 1
Call PHighlight(grdAlgoritma, 0, 4)

84

Case 2
Case 3
Case 4
Case 5
Case 6
Case 7

'Langkah - 2
Call PDelHighlight(grdAlgoritma, 0, 4)
Call PHighlight(grdAlgoritma, 6, 7)
'Langkah - 3
Call PDelHighlight(grdAlgoritma, 6, 7)
Call PHighlight(grdAlgoritma, 9, 10)
'Langkah - 4
Call PDelHighlight(grdAlgoritma, 9, 10)
Call PHighlight(grdAlgoritma, 12, 13)
'Langkah - 5
Call PDelHighlight(grdAlgoritma, 12, 13)
Call PHighlight(grdAlgoritma, 15, 15)
'Langkah - 6
Call PDelHighlight(grdAlgoritma, 15, 15)
Call PHighlight(grdAlgoritma, 17, 17)
'Langkah - 7
Call PDelHighlight(grdAlgoritma, 17, 17)
Call PHighlight(grdAlgoritma, 19, 19)

End Select
ElseIf nLangkah1 = 31 Then
Select Case nLangkah2
Case 1: Call PHighlight(grdAlgoritma, 0, 0)
Case 2 'Langkah - 2
Call PDelHighlight(grdAlgoritma, 0, 0)
Call PHighlight(grdAlgoritma, 2, 3)
Case 3 'Langkah - 3
Call PDelHighlight(grdAlgoritma, 2, 3)
Call PHighlight(grdAlgoritma, 5, 6)
Case 4 'Langkah - 4
Call PDelHighlight(grdAlgoritma, 5, 6)
Call PHighlight(grdAlgoritma, 8, 9)
Case 5 'Langkah - 5
Call PDelHighlight(grdAlgoritma, 8, 9)
Call PHighlight(grdAlgoritma, 11, 11)
Case 6 'Langkah - 6
Call PDelHighlight(grdAlgoritma, 11, 11)
Call PHighlight(grdAlgoritma, 13, 13)
Case 7 'Langkah - 7
Call PDelHighlight(grdAlgoritma, 13, 13)
Call PHighlight(grdAlgoritma, 15, 17)
End Select
Else
Select Case nLangkah2
Case 1: Call PHighlight(grdAlgoritma, 0, 0)
Case 2 'Langkah - 2
Call PDelHighlight(grdAlgoritma, 0, 0)
Call PHighlight(grdAlgoritma, 2, 3)
Case 3 'Langkah - 3
Call PDelHighlight(grdAlgoritma, 2, 3)
Call PHighlight(grdAlgoritma, 5, 6)
Case 4 'Langkah - 4
Call PDelHighlight(grdAlgoritma, 5, 6)

85

Call PHighlight(grdAlgoritma, 8, 9)
Case 5 'Langkah - 5
Call PDelHighlight(grdAlgoritma, 8, 9)
Call PHighlight(grdAlgoritma, 11, 11)
Case 6 'Langkah - 6
Call PDelHighlight(grdAlgoritma, 11, 11)
Call PHighlight(grdAlgoritma, 13, 13)
Case 7 'Langkah - 7
Call PDelHighlight(grdAlgoritma, 13, 13)
Call PHighlight(grdAlgoritma, 15, 15)
End Select
End If
'*- Hasil Eksekusi -*
Select Case nLangkah2
Case 1 'Hasil Eksekusi Langkah - 1
If nLangkah1 = 0 Then
txtHasil.Text = txtHasil.Text & vbCrLf & _
"(1) " & lblText1 & " = '" &
IIf(cTipeProses = "ENKRIPSI",
strPlainText, strCipherText) & "'" &
vbCrLf & _
"
Konversi ke " & IIf(bBiner, "biner =
" & Left(cTextB1, 20) & vbCrLf & _
"
" & Mid(cTextB1, 21, 40) & vbCrLf & _
"
" & Mid(cTextB1, 61, 4), "heksa = " &
GetBentukP(cTextB1, False)) & vbCrLf & _
"
L(0) = " & GetBentukP(L(0), bBiner) &
vbCrLf & _
"
R(0) = " & GetBentukP(R(0), bBiner)
Else
txtHasil.Text = txtHasil.Text & vbCrLf & _
"(1) L(" & nLangkah1 & ") = " &
GetBentukP(L(nLangkah1), bBiner) & vbCrLf & _
"
R(" & nLangkah1 & ") = " &
GetBentukP(R(nLangkah1), bBiner)
End If
Case 2

'Langkah 2 - CM1 (Adder Modulo 2^32)


nT1 = FBinerToDec(R(nLangkah1))
'R(i)
nT2 = FBinerToDec(K(Val(lblKSU.Tag))) 'K(i)
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(2) R(" & nLangkah1 & ") + K(" & lblKSU.Tag
& ") mod 2^32" & vbCrLf & vbCrLf & _
"
R(" & FormatStr(nLangkah1, " ", 2) & ")
= " & nT1 & vbCrLf & _
"
K(" & FormatStr(lblKSU.Tag, " ", 2) &
") = " & nT2 & vbCrLf & _
"
" & String(32, "-") & " + " & vbCrLf & _
"
Hasil = " & nT1 + nT2 & " mod 2^32 " &

86

vbCrLf & _
"
= " & FMod(nT1 + nT2, 2 ^ 32) &
vbCrLf & "
= "
GetBentukP(CM1(nLangkah1), bBiner)
Case 3

&

'Langkah 3 - S-BOX
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(3) Pecah menjadi 8 kelompok dan masukkan
ke" & vbCrLf & "
SBox."
'Masukkan ke S-Box
For J = 0 To 7
'Pecah menjadi 8 kelompok @4bit
cT1 = Mid(CM1(nLangkah1), (J * 4) + 1, 4)
'Biner ke desimal
nT1 = FBinerToDec(cT1)
'Fungsi S-Box
nT2 = SBox(J)(nT1)
'Kembalikan hasil SBox
cT2 = FormatStr(FDecToBiner(nT2), "0", 4)
txtHasil = txtHasil & vbCrLf & _
"
" & GetBentukP(cT1, bBiner) & " = " &
FormatStr(nT1, " ", 2) & _
" -> SBOX(" & J & ") -> " & FormatStr(nT2,
" ", 2) & " = " & GetBentukP(cT2, bBiner)
Next J

Case 4

'Langkah 4 - R (Rotate Left Shift)


txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(4) Hasil digabungkan kembali dan lakukan"
& vbCrLf & _
"
Rotate Left Shift sebanyak 11 kali."
cT1 = S(nLangkah1)
For J = 1 To 11
'Rotasi Left Shift sebanyak 11 bit
cT1 = FRotateLeftShift(cT1, 1)
txtHasil.Text = txtHasil.Text & vbCrLf & _
"
RLS(" & FormatStr(J, " ", 2) & ")=" &
GetBentukP(cT1, bBiner)
Next J

Case 5

'Langkah 5 - R(i+1)
If nLangkah1 <> 31 Then
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 05. R(i+1) = R(i) XOR L(i)

87

'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(5) R(" & nLangkah1 + 1 & ") = R(" &
nLangkah1 & ") XOR L(" & nLangkah1 & ")"
& vbCrLf & vbCrLf & _
"
R(" & FormatStr(nLangkah1, " ", 2)
& ") = " & GetBentukP(RSL(nLangkah1),
bBiner) & vbCrLf & _
"
L(" & FormatStr(nLangkah1, " ", 2)
& ") = " & GetBentukP(L(nLangkah1),
bBiner) & vbCrLf & _
"
" & String(37, "-") & " XOR" &
vbCrLf & _
"
R(" & FormatStr(nLangkah1 + 1, " ",
2) & ") = " & GetBentukP(R(nLangkah1 +
1), bBiner)
Else
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 05. R(i+1) = R(i) sblm proses - u/
'
putaran terakhir
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(5) R(" & nLangkah1 + 1 & ") = R(" &
nLangkah1 & ") sebelum proses." & vbCrLf
& "
R(" & nLangkah1 + 1 & ") = " &
GetBentukP(R(nLangkah1), bBiner)
End If
Case 6

'Langkah 6 - L(i+1)
If nLangkah1 <> 31 Then
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 06. L(i+1) = R(i) sblm proses - u/
'
putaran terakhir
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(6) L(" & nLangkah1 + 1 & ") = R(" &
nLangkah1 & ") sebelum proses." & vbCrLf
& "
L(" & nLangkah1 + 1 & ") = " &
GetBentukP(R(nLangkah1), bBiner)
Else
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
' 06. L(i+1) = R(i) XOR L(i)
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(6) L(" & nLangkah1 + 1 & ") = R(" &
nLangkah1 & ") XOR L(" & nLangkah1 & ")"

88

& vbCrLf & vbCrLf & _


"
R(" & FormatStr(nLangkah1, " ", 2)
& ") = " & GetBentukP(RSL(nLangkah1),
bBiner) & vbCrLf & _
"
L(" & FormatStr(nLangkah1, " ", 2)
& ") = " & GetBentukP(L(nLangkah1),
bBiner) & vbCrLf & _
"
" & String(37, "-") & " XOR" &
vbCrLf & _
"
L(" & FormatStr(nLangkah1 + 1, " ",
2) & ") = " & GetBentukP(L(nLangkah1 +
1), bBiner)
End If
Case 7

'Langkah 7 - u/ putaran terakhir


If nLangkah1 = 31 Then
txtHasil.Text = txtHasil.Text & vbCrLf &
vbCrLf & _
"(7) L(32) = b(32), b(31), ... b(1)" &
vbCrLf & _
"
R(32) = a(32), a(31), ... a(1)" &
vbCrLf & _
"
Hasil = a(1), ... a(32), b(1), ...
b(32)" & vbCrLf & _
"
Hasil dalam " & IIf(bBiner, "biner
= " & Left(cTextB2, 20) & vbCrLf & _
"
" & Mid(cTextB2, 21, 40) & vbCrLf &
"
" & Mid(cTextB2, 61, 4), _
"heksa = " & GetBentukP(cTextB2, False)
& vbCrLf & "
") & _
" -> ubah ke ascii " & vbCrLf & "
" &
lblText2 & " = " & cTextC
End If

End Select
'****************** ENDS *******************
'Inc Langkah-2
nLangkah2 = nLangkah2 + 1
'Jika nLangkah2 > Max
If nLangkah2 = 8 Then
'Inc Langkah - 1
nLangkah1 = nLangkah1 + 1
' > Max
If nLangkah1 = 32 Then
nLangkah1 = 31
bResume = False
cmdSave.Enabled = True
End If
'Reset pict

89

lblStep7.ForeColor = &H0&
Call ShowPutaran(nLangkah1)
'Reset nLangkah2
nLangkah2 = 1
End If
Wend
'*-*-*-*-*-*-*- LOOPING
bResume = False
Else

'PAUSE
bPause = True
End If
End Sub

4.2

Implementasi Sistem
Implementasi sistem program ini mencakup spesifikasi kebutuhan perangkat

keras (hardware) dan spesifikasi perangkat lunak (software).

4.2.1

Spesifikasi Perangkat Keras dan Perangkat Lunak


Perangkat lunak ini direkomendasikan untuk dijalankan dengan menggunakan

perangkat keras (hardware) yang mempunyai spesifikasi berikut :


1.

Prosesor Intel Pentium IV 2.0 Ghz ke atas.

2.

Memory 64 MB.

3.

VGA card 1 MB.

4.

Monitor dengan resolusi 800 600 pixel.

5.

Keyboard dan Mouse

90

Adapun perangkat lunak (software) yang digunakan untuk menjalankan aplikasi


ini adalah lingkungan sistem operasi Microsoft-Windows 98 atau Microsoft-Windows
NT/2000/XP.
4.2.2

Cara Menginstall Perangkat Lunak


Perangkat lunak dapat diinstall ke dalam komputer dengan melakukan

langkah-langkah berikut ini :


1. Masukkan CD Kriptografi Metoda GOST ke dalam CD-ROM komputer.
2. Tunggu hingga muncul Windows Explorer untuk browsing CD atau aktifkan
Windows Explorer dan explore CD drive-nya.
3. Masuk ke folder Setup dan cari file Setup.exe.
4. Jalankan file tersebut dengan cara melakukan klik ganda (double click) pada
file tersebut.
5. Pilih lokasi tempat penyimpanan file di dalam harddisk komputer.
6. Tunggu hingga proses penginstallan selesai.

4.2.3

Cara Menjalankan Perangkat Lunak


Perangkat lunak pembelajaran kriptografi metoda GOST ini dapat dijalankan

cara sebagai berikut :


1. Untuk proses pembentukan kunci, maka lakukan proses berikut ini :
a. Klik menu Setting & Pembelajaran, dan sub menu Proses
Pembentukan Kunci.

91

Gambar 4.1 Klik menu Setting & Pembelajaran >> Proses Pembentukan Kunci
b. Muncul form Input Kunci Enkripsi / Dekripsi.

Gambar 4.2 Form Input Kunci Enkripsi / Dekripsi

92

c. Input kunci pada textbox Kunci, klik tombol Proses jika sudah
selesai. Maka, akan muncul form Proses Pembentukan Kunci. Klik
tombol Play untuk memulai proses pembentukan kunci.

Gambar 4.3 Form Proses Pembentukan Kunci

2. Untuk proses enkripsi, maka lakukan proses berikut ini :


a. Klik menu Setting & Pembelajaran, dan sub menu Proses Enkripsi.

93

Gambar 4.4 Klik menu Setting & Pembelajaran >> Proses Enkripsi
b. Muncul form Input Data untuk Proses Enkripsi.

Gambar 4.5 Form Input Data untuk Proses Enkripsi

94

c. Input plaintext dan kunci, klik tombol Proses untuk memulai proses.
Maka, akan muncul form Proses Enkripsi. Klik tombol Play untuk
memulai proses enkripsi. Jika ingin melihat langkah demi langkah
secara manual, maka klik tombol Next dan Back.

Gambar 4.6 Form Proses Enkripsi

95

3. Untuk proses dekripsi, maka lakukan proses berikut ini :


a. Klik menu Setting & Pembelajaran, dan sub menu Proses Dekripsi.

Gambar 4.7 Klik menu Setting & Pembelajaran >> Proses Dekripsi

96

b. Muncul form Input Data untuk Proses Dekripsi.

Gambar 4.8 Form Input Data untuk Proses Dekripsi


c. Input ciphertext dan kunci, klik tombol Proses untuk memulai
proses. Maka, akan muncul form Proses Dekripsi. Klik tombol Play
untuk memulai proses dekripsi. Jika ingin melihat langkah demi
langkah secara manual, maka klik tombol Next dan Back.

97

Gambar 4.9 Form Proses Dekripsi

Anda mungkin juga menyukai