Enkripsi dan Dekripsi File dengan Algoritma Rijndael - Halo 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.sumber : http://www.academia.edu/7426961/Algoritma_Advanced_Encryption_Standard_AES_
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.
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.Cryptographysetelah 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.FileStreamlanjutkan 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 Subkode 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 TryLakukan 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 IfPada 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 IfLakukan 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 Ifdemikian 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
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?
bagaimana memunculkan perhitungannya di tampilkan di program berdasarkan bit dan size file nya dala metode rijndael
Bang link nya udah gak bisa lagi ya?
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
Bang boleh minta source codenya gak? Kirim ke sammanik120@gmail.com thx
Bisa bagi projeknya? Soalnua link download sudah tdk bisa lagi
Kirim ke email saya
"holiuspanggabean190999@gmail.com"