BAB IV
ALGORITMA DAN IMPLEMENTASI
4.1
Algoritma
Algoritma perancangan perangkat lunak pembelajaran kriptografi metoda
4.1.1
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
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
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
'---------------------'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
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
'K(i)
79
'Putaran 8 - 31
nTemp2 = FBinerToDec(K(7 - (I Mod 8)))
End If
'K(i)
80
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
82
83
End Sub
4.1.5
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
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
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
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
4.2.1
2.
Memory 64 MB.
3.
4.
5.
90
4.2.3
91
Gambar 4.1 Klik menu Setting & Pembelajaran >> Proses Pembentukan Kunci
b. Muncul 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.
93
Gambar 4.4 Klik menu Setting & Pembelajaran >> Proses Enkripsi
b. Muncul 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.
95
Gambar 4.7 Klik menu Setting & Pembelajaran >> Proses Dekripsi
96
97