-->

Enkripsi dan Dekripsi File dengan Algoritma Rijndael


Enkripsi dan Dekripsi File dengan Algoritma RijndaelHalo sahabat blogger semuanya, kembali lagi bersama saya guzko di blog tutorial yang sederhana ini. Semoga blog saya ini bisa memberikan manfaat ataupun inspirasi bagi sahabat blogger semuanya.

Seperti judul saya diatas yaitu Enkripsi dan Dekripsi File dengan Algoritma Rijndael, kali ini saya akan membagikan tutorial kepada sahabat blogger semuanya.

(Baca Juga : Enkripsi Dekripsi Teks Sederhana)

Aplikasi enkripsi dan dekripsi yang akan kita buat kali ini menggunakan algoritma rijndael. Sebenarnya banyak algoritma yang bisa digunakan tapi untuk tutorial kali ini, saya share tentang algoritma rijndael dulu.

Algoritma Rijndael

Pada rahun 1997,National Institute of Standard and Technology (NIST) of United States mengeluarkan Advanced Encryption Standard (AES) untuk menggantikan Data Encryption Standard (DES). AES dibangun dengan maksud untuk mengamankan pemerintahan diberbagi bidang. Algoritma AES di design menggunkan blok chiper minimal dari blok 128 bit input dan mendukung ukuran 3 kunci (3-key-sizes), yaitu kunci 128 bit, 192 bit, dan 256 bit. Pada Agustus 1998, NIST mengumumkan bahwa ada 15 proposal AES yang telah diterima dan dievaluasi, setelah mengalami proses seleksi terhadap algoritma yang masuk.
Pada bulan Oktober 2000, NIST mengumumkan bahwa Rijndael sebagai algoritma yang terpilih untuk standar AES yang baru. Baru pada februari 2001 NIST
mengirimkan draff kepada Federal Information Processing Standards (FIPS) untuk standar AES. Kemudian pada 26 November 2001, NIST mengumumkan produk akhir dari Advanced Encryption Standard.
sumber : http://www.academia.edu/7426961/Algoritma_Advanced_Encryption_Standard_AES_

Baik itu tadi penjelasan singkat saya tentang Rijndael, algoritma yang akan kita gunakan untuk membuat aplikasi enkripsi dan dekripsi ini. Sekarang waktunya kita membuat aplikasinya :

1. Buat New Project
Buka visual studio sahabat blogger dan buat sebuah project baru. jika sudah, kemudian design aplikasinya seperti gambar berikut ini. Sebenarnya sih design bisa terserah sahabat blogger berkreasi. Berikut design yang saya buat :


Komponen yang terdapat pada design tersebut :
  • 1 tab control
  • 8 textbox
  • 6 button
  • 1 picturebox
  • 1 openfiledialog
  • 1 folderbrowsedialog

untuk property name nya seperti ini :
Komponen Property Name Fungsi
Button btnBrowse Memilih lokasi file untuk di-enkripsi
btnChange Merubah lokasi default file hasil enkripsi
btnEnkripsi untuk melakukan proses enkripsi file yang ditentukan
btnBrowse2 Memilih lokasi file untuk di-enkripsi
btnChange2 Merubah lokasi default file hasil dekripsi
btnDekripsi Untuk melakukan proses dekripsi file yang ditentukan
Textbox txtEnkripsi Menampilkan lokasi file untuk di-enkripsi
txtChange Menampilkan lokasi default hasil file enkripsi
txtPassword Field untuk menginputkan password, dimana pada waktu nanti akan di-dekripsi maka user akan diminta untuk menginputkan password
txtKonfirm konfirmasi password enkripsi
txtDekripsi Menampilkan lokasi file untuk di-dekripsi
txtChange2 Menampilkan lokasi default hasil dekripsi file
txtPass2 Menginputkan password yang telah di setting sebelumnya pada waktu enkripsi file (pilihan ini optional)
txtKonfirm2 konfirmasi password
Tab Control TablControl1 Untuk memudahkan user melakukan perpindahan menu dari enkripsi ke dekripsi
Picture Box Picturebox1 Menampilkan preview dari file yang dipilih
Open File Dialog Openfiledialog Untuk melakukan browse file enkripsid an dekripsi
Folder Browse Dialog Folderbrowsedialog1 Untuk memilih lokasi file baru hasil penyimpanan enkripsi / dekripsi

2. Tahap Peng-codingan
setelah selesai melakukan design seperti diatas, kini saat kita melakukan tahap peng-codingan. Untuk yang pertama, kita perlu melakukan import reference terlebih dahulu , codenya seperti berikut :
Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
setelah itu, selanjutnya tuliskan kode untuk mendeklarasikan variable secara global yang akan digunakan untuk proses. code deklarasi variable globalnya seperti berikut :
Dim strFileToEncrypt As String
    Dim strFileToDecrypt As String
    Dim strOutputEncrypt As String
    Dim strOutputDecrypt As String
    Dim fsInput As System.IO.FileStream
    Dim fsOutput As System.IO.FileStream
lanjutkan dengan menuliskan kode berikut ini, yaitu private function untuk membuat password dan menyimpannya. Kodenya seperti berikut ini :
Private Function CreateKey(ByVal strPassword As String) As Byte()
        'konversi strPassword ke array dan simpan pada chrData
        Dim chrData() As Char = strPassword.ToCharArray
        'menggunakan variable intLength untuk mendapatkan size dari strPassword
        Dim intLength As Integer = chrData.GetUpperBound(0)
        'membuat variable bytDataToHash dan membuat size nya sama dengan chrData
        Dim bytDataToHash(intLength) As Byte

        'menggunakan fungsi perulangan untuk mengkonversi dan menyimpan chrData kedalam bytDataToHash
        For i As Integer = 0 To chrData.GetUpperBound(0)
            bytDataToHash(i) = CByte(Asc(chrData(i)))
        Next

        'mendeklarasikan jenis hash yang akan digunakan
        Dim SHA512 As New System.Security.Cryptography.SHA512Managed
        'mendeklarasikan bytResult, hash bytDataToHash dan simpan dalam bytResult
        Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
        'mendeklarasikan bytKey(31). variable ini akan menyimpan sebanyak 256 bits
        Dim bytKey(31) As Byte

        For i As Integer = 0 To 31
            bytKey(i) = bytResult(i)
        Next

        Return bytKey
    End Function

kemudian lanjutkan dengan menginputkan private function berikut ini :
Private Function CreateIV(ByVal strPassword As String) As Byte()
        Dim chrData() As Char = strPassword.ToCharArray
        Dim intLength As Integer = chrData.GetUpperBound(0)
        Dim bytDataToHash(intLength) As Byte

        For i As Integer = 0 To chrData.GetUpperBound(0)
            bytDataToHash(i) = CByte(Asc(chrData(i)))
        Next

        Dim SHA512 As New System.Security.Cryptography.SHA512Managed
        Dim bytResult As Byte() = SHA512.ComputeHash(bytDataToHash)
        Dim bytIV(15) As Byte

        For i As Integer = 32 To 47
            bytIV(i - 32) = bytResult(i)
        Next

        Return bytIV
    End Function

lanjutkan dengan menginputkan kode function untuk melakukan proses enkripsi dan dekripsi. Kodenya berikut ini :
Private Sub EncryptOrDecryptFile(ByVal strInputFile As String, _
                                     ByVal strOutputFile As String, _
                                     ByVal bytKey() As Byte, _
                                     ByVal bytIV() As Byte, _
                                     ByVal Direction As CryptoAction)
        Try

            fsInput = New System.IO.FileStream(strInputFile, FileMode.Open, _
                                               FileAccess.Read)
            fsOutput = New System.IO.FileStream(strOutputFile, FileMode.OpenOrCreate, _
                                                FileAccess.Write)
            fsOutput.SetLength(0)

            Dim bytBuffer(4096) As Byte
            Dim lngBytesProcessed As Long = 0
            Dim lngFileLength As Long = fsInput.Length
            Dim intBytesInCurrentBlock As Integer
            Dim csCryptoStream As CryptoStream
            Dim cspRijndael As New System.Security.Cryptography.RijndaelManaged
            pbStatus.Value = 0
            pbStatus.Maximum = 100

            Select Case Direction
                Case CryptoAction.ActionEncrypt
                    csCryptoStream = New CryptoStream(fsOutput, _
                    cspRijndael.CreateEncryptor(bytKey, bytIV), _
                    CryptoStreamMode.Write)

                Case CryptoAction.ActionDecrypt
                    csCryptoStream = New CryptoStream(fsOutput, _
                    cspRijndael.CreateDecryptor(bytKey, bytIV), _
                    CryptoStreamMode.Write)
            End Select

            While lngBytesProcessed < lngFileLength
                intBytesInCurrentBlock = fsInput.Read(bytBuffer, 0, 4096)
                csCryptoStream.Write(bytBuffer, 0, intBytesInCurrentBlock)
                lngBytesProcessed = lngBytesProcessed + CLng(intBytesInCurrentBlock)
                pbStatus.Value = CInt((lngBytesProcessed / lngFileLength) * 100)
            End While

            csCryptoStream.Close()
            fsInput.Close()
            fsOutput.Close()

            If Direction = CryptoAction.ActionEncrypt Then
                Dim fileOriginal As New FileInfo(strFileToEncrypt)
                fileOriginal.Delete()
            End If

            If Direction = CryptoAction.ActionDecrypt Then
                Dim fileEncrypted As New FileInfo(strFileToDecrypt)
                fileEncrypted.Delete()
            End If

            Dim Wrap As String = Chr(13) + Chr(10)
            If Direction = CryptoAction.ActionEncrypt Then
                MsgBox("Enkripsi Selesai" + Wrap + Wrap + _
                        "Total Proses bytes = " + _
                        lngBytesProcessed.ToString, _
                        MsgBoxStyle.Information, "Guzko Tutorial")

                pbStatus.Value = 0
                txtEnkripsi.Text = "Klik Browse untuk load file."
                txtPassword.Text = ""
                txtKonfirm.Text = ""
                txtChange.Text = ""
                btnChange.Enabled = False
                btnEnkripsi.Enabled = False

            Else
                MsgBox("Dekripsi Selesai" + Wrap + Wrap + _
                       "Total Proses bytes = " + _
                        lngBytesProcessed.ToString, _
                        MsgBoxStyle.Information, "Guzko Tutorial")

                pbStatus.Value = 0
                txtDekripsi.Text = "Klik Browse untuk load file."
                txtPass2.Text = ""
                txtKonfirm2.Text = ""
                txtChange2.Text = ""
                btnChange2.Enabled = False
                btnDekripsi.Enabled = False
            End If


            'Catch file not found error.
        Catch When Err.Number = 53 'if file not found
            MsgBox("Pastikan lokasi dan file" + _
                    "benar dan file ada.", _
                     MsgBoxStyle.Exclamation, "Kesalahan lokasi file (Guzko Tutorial)")

        Catch
            fsInput.Close()
            fsOutput.Close()

            If Direction = CryptoAction.ActionDecrypt Then
                Dim fileDelete As New FileInfo(txtChange2.Text)
                fileDelete.Delete()
                pbStatus.Value = 0
                txtPass2.Text = ""
                txtKonfirm2.Text = ""

                MsgBox("Pastikan password yang diinputkan benar dan sesuai" + _
                        MsgBoxStyle.Exclamation, "Password Salah (Guzko Tutorial)")
            Else
                Dim fileDelete As New FileInfo(txtChange.Text)
                fileDelete.Delete()

                pbStatus.Value = 0
                txtPassword.Text = ""
                txtKonfirm.Text = ""

                MsgBox("File ini tidak dapat di-enkripsi.", _
                        MsgBoxStyle.Exclamation, "Erorr (Guzko Tutorial)")

            End If

        End Try
    End Sub
kode diatas adalah fungsi-fungsi dan global varible yang merupakan inti kode dari aplikasi ini. Jika sudah selesai membuat kode diatas, lanjutkan dengan klik ganda pada btnBrowse dan inputkan kode berikut ini :
OpenFileDialog.FileName = ""
        OpenFileDialog.Title = "Pilih file untuk di-enkripsi"
        OpenFileDialog.InitialDirectory = "C:\"
        OpenFileDialog.Filter = "All Files (*.*) | *.*"

        Try
            If OpenFileDialog.ShowDialog = DialogResult.OK Then
                strFileToEncrypt = OpenFileDialog.FileName
                txtEnkripsi.Text = strFileToEncrypt

                Dim iPosition As Integer = 0
                Dim i As Integer = 0

                While strFileToEncrypt.IndexOf("\"c, i) <> -1
                    iPosition = strFileToEncrypt.IndexOf("\"c, i)
                    i = iPosition + 1
                End While

                strOutputEncrypt = strFileToEncrypt.Substring(iPosition + 1)
                Dim S As String = strFileToEncrypt.Substring(0, iPosition + 1)
                strOutputEncrypt = strOutputEncrypt.Replace("."c, "_"c)
                txtChange.Text = S + strOutputEncrypt + ".encrypt"
                btnEnkripsi.Enabled = True
                btnChange.Enabled = True

                PictureBox1.Image = Image.FromFile(OpenFileDialog.FileName)
            End If
        Catch ex As Exception

        End Try
Lakukan juga klik ganda pada btnBrowse2, inputkan kode dibawah ini :
OpenFileDialog.FileName = ""
        OpenFileDialog.Title = "Pilih file untuk di-dekripsi"
        OpenFileDialog.InitialDirectory = "C:\"
        OpenFileDialog.Filter = "File enkripsi (*.encrypt) | *.encrypt"

        'Find out if the user chose a file.
        If OpenFileDialog.ShowDialog = DialogResult.OK Then
            strFileToDecrypt = OpenFileDialog.FileName
            txtDekripsi.Text = strFileToDecrypt
            Dim iPosition As Integer = 0
            Dim i As Integer = 0

            While strFileToDecrypt.IndexOf("\"c, i) <> -1
                iPosition = strFileToDecrypt.IndexOf("\"c, i)
                i = iPosition + 1
            End While

            strOutputDecrypt = strFileToDecrypt.Substring(0, strFileToDecrypt.Length - 8)
            Dim S As String = strFileToDecrypt.Substring(0, iPosition + 1)
            strOutputDecrypt = strOutputDecrypt.Substring((iPosition + 1))
            txtChange2.Text = S + strOutputDecrypt.Replace("_"c, "."c)
            btnDekripsi.Enabled = True
            btnChange2.Enabled = True

        End If
Pada btnChange, klik juga ganda dan inputkan kode berikut ini :
FolderBrowserDialog.Description = "Pilih folder untuk lokasi enkripsi file"
        If FolderBrowserDialog.ShowDialog = DialogResult.OK Then
            txtChange.Text = FolderBrowserDialog.SelectedPath + _
                                         "\" + strOutputEncrypt + ".encrypt"
        End If
Lakukan hal yang sama pada btnChange2 dengan klik ganda dan inputkan kode berikut :
FolderBrowserDialog.Description = "Pilih folder untuk lokasi dekripsi file"
        If FolderBrowserDialog.ShowDialog = DialogResult.OK Then
            txtChange2.Text = FolderBrowserDialog.SelectedPath + _
                                         "\" + strOutputDecrypt.Replace("_"c, "."c)
        End If
demikian kode singkatnya dari aplikasi ini, untuk kode selengkapnya bisa sahabat blogger download pada link yang telah saya sediakan dibawah ini. Berikut gambar dibawah ini merupakan hasil dari aplikasi yang kita buat Enkripsi File :
Dekripsi File :
demikian tutorial tentang Enkripsi dan Dekripsi File dengan Algoritma Rijndael. Semoga tutorial ini bisa memberikan manfaat bagi sahabat blogger untuk melindungi file yang rahasia di komputer atau laptop atau mungkin juga dengan melihat aplikasi sederhana ini bisa memberikan sahabat blogger inspirasi untuk berkarya membuat aplikasi yang lebih canggih lagi. Sekian dulu tutorial dari saya, untuk mendownload source code aplikasi ini bisa pada link dibawah ini. Kita berjumpa lagi di lain waktu dengan tutorial yang berbeda. seee...uuuu...

6 komentar

avatar

terimakasih mas kodenya bermanfaat sekali, tetapi setelah saya coba enkripsi png, jpg tidak bisa di enkrip ya mas, nah kode untuk enkrip dan dekrip gambar apa kah mas bisa bantu?

avatar

bagaimana memunculkan perhitungannya di tampilkan di program berdasarkan bit dan size file nya dala metode rijndael

avatar

Bang link nya udah gak bisa lagi ya?

avatar

Website anda membantu saya untuk mengerjakn tugas kuliah saya, terimakasih ya. Kunjungi website saya di https://www.atmaluhur.ac.id dan kenalkan saya atika dhia nisrina 1722500041

avatar

Bang boleh minta source codenya gak? Kirim ke sammanik120@gmail.com thx

avatar

Bisa bagi projeknya? Soalnua link download sudah tdk bisa lagi
Kirim ke email saya
"holiuspanggabean190999@gmail.com"

Click to comment