Enkripsi Dan Dekripsi File Dengan Algoritma Rijndael
Enkripsi dan Dekripsi File dengan Algoritma Rijndael – Halo teman blogger semuanya, kembali lagi bersama saya guzko di blog tutorial yang sederhana ini. Semoga blog saya ini mampu menawarkan manfaat ataupun ide bagi teman blogger semuanya.
Seperti judul saya diatas yaitu Enkripsi dan Dekripsi File dengan Algoritma Rijndael, kali ini saya akan membagikan tutorial kepada teman 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 mampu digunakan tapi untuk tutorial kali ini, saya share ihwal 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), ialah kunci 128 bit, 192 bit, dan 256 bit. Pada Agustus 1998, NIST mengumumkan bahwa ada 15 tawaran 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 simpulan dari Advanced Encryption Standard.
sumber : http://www.academia.edu/7426961/Algoritma_Advanced_Encryption_Standard_AES_
Baik itu tadi penjelasan singkat saya ihwal 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 teman blogger dan buat sebuah project baru. jikalau sudah, kemudian design aplikasinya mirip gambar berikut ini. Sebenarnya sih design mampu terserah teman 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 mirip 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 hidangan 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 gres hasil penyimpanan enkripsi / dekripsi |
2. Tahap Peng-codingan
setelah selesai melakukan design mirip diatas, kini dikala kita melakukan tahap peng-codingan. Untuk yang pertama, kita perlu melakukan import reference terlebih dahulu , codenya mirip berikut :
Imports System Imports System.IO Imports System.Security Imports System.Security.Cryptography
setelah itu, selanjutnya tuliskan instruksi untuk mendeklarasikan variable secara global yang akan digunakan untuk proses. code deklarasi variable globalnya mirip 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 instruksi berikut ini, ialah private function untuk membuat password dan menyimpannya. Kodenya mirip 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 menerima 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 instruksi 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 mampu di-enkripsi.", _ MsgBoxStyle.Exclamation, "Erorr (Guzko Tutorial)") End If End Try End Sub
instruksi diatas ialah fungsi-fungsi dan global varible yang merupakan inti instruksi dari aplikasi ini. Jika sudah selesai membuat instruksi diatas, lanjutkan dengan klik ganda pada btnBrowse dan inputkan instruksi 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 instruksi 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 instruksi 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 instruksi 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 instruksi singkatnya dari aplikasi ini, untuk instruksi selengkapnya mampu teman 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 :
Sumber http://guz-kopyok.blogspot.com/