Algoritma TEA (Tiny Encryption Algorithm) 11


Algoritma TEA (Tiny Encryption Algorithm) adalah salah satu algoritma yang dapat digunakan untuk melakukan enkripsi data sehingga data asli hanya dapat dibaca oleh seseorang yang memiliki kunci enkripsi tersebut. Contoh yang dibahas kali ini adalah mengenai enkripsi dan dekripsi dari sebuah kalimat.
Algoritma ini menggunakan teknik cipher blok dengan key. TEA memiliki ukuran blok 32 bit unsigned (yang dapat diperoleh dari blok data 64 bit) dan menggunakan ukuran key 128 bit. Algoritma ini menggunakan jaringan Feistel dengan jumlah round yang direkomendasikan adalah 64 kali.


Langkah-langkah penggunaan algoritma ini adalah

1. Tentukan kalimat yang akan dienkrip

Console.WriteLine("Masukkan kalimat yang akan dienkrip: ")
Dim input As String = Console.ReadLine

2. Tentukan kata kunci enkripsi yang digunakan

Console.WriteLine("Masukkan kata kunci enkripsi: ")
Dim kataKunci As String = Console.ReadLine

3. Lakukan inisialisasi variabel yang digunakan oleh metode ini
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Dim t As New TEA()

* Skrip tersebut akan melakukan inisialisasi pada Class TEA. Class ini berisi tentang fungsi-fungsi yang digunakan untuk melakukan enkripsi dan dekripsi. Deklarasi Class TEA adalah sebagai berikut:

Public Class TEA	
	. . .
End Class

4. Lakukan enkripsi kalimat awal menggunakan algoritma ini
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Dim hasilEnkripsi As String = t.Encrypt(input, kataKunci)

* Skrip tersebut akan menjalankan proses enkripsi yang terdapat dalam Class TEA.

Public Function Encrypt(input As String, Key As String) As String
	If input.Length = 0 Then
		Throw New ArgumentException("Data harus memiliki setidaknya 1 karakter.")
	End If

	Dim formattedKey As UInteger() = FormatKey(Key)

	'Pastikan input memiliki panjang yang berjumlah genap dengan menambahkan karakter null
	If input.Length Mod 2 <> 0 Then
		input += ControlChars.NullChar
	End If

	Dim byteInput As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(input)

	Dim cipher As String = String.Empty
	Dim tempData As UInteger() = New UInteger(1) {}
	For i As Integer = 0 To byteInput.Length - 1 Step 2
		tempData(0) = byteInput(i)
		tempData(1) = byteInput(i + 1)
		encode(tempData, formattedKey)
		cipher += UIntToStr(tempData(0)) + UIntToStr(tempData(1))
	Next

	Return cipher
End Function

* Sedangkan proses enkripsi utama algoritma TEA adalah sebagai berikut

Private Sub encode(v As UInteger(), k As UInteger())
	Dim y As UInteger = v(0)
	Dim z As UInteger = v(1)
	Dim sum As UInteger = 0
	Dim delta As UInteger = &H9E3779B9UI
	Dim n As UInteger = 32

	While n > 0
		sum += delta
		y += (z << 4) + k(0) Xor z + sum Xor (z >> 5) + k(1)
		z += (y << 4) + k(2) Xor y + sum Xor (y >> 5) + k(3)

		n -= 1
	End While

	v(0) = y
	v(1) = z
End Sub

5. Lakukan dekripsi dari kalimat yang telah terenkripsi
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini

Dim hasilDekripsi As String = t.Decrypt(hasilEnkripsi)

* Skrip tersebut akan menjalankan proses dekripsi yang terdapat dalam Class TEA.

Public Function Decrypt(input As String, Key As String) As String
	Dim formattedKey As UInteger() = FormatKey(Key)

	Dim x As Integer = 0
	Dim tempData As UInteger() = New UInteger(1) {}
	Dim byteInput As Byte() = New Byte(input.Length / 8 * 2 - 1) {}
	For i As Integer = 0 To input.Length - 1 Step 8
		tempData(0) = StrToUint(input.Substring(i, 4))
		tempData(1) = StrToUint(input.Substring(i + 4, 4))
		decode(tempData, formattedKey)

		byteInput(x) = CByte(tempData(0))
		x += 1
		byteInput(x) = CByte(tempData(1))
		x += 1
	Next

	'Hilangkan karakter null jika sebelumnya telah ditambahkan
	Dim cipher As String = System.Text.ASCIIEncoding.ASCII.GetString(byteInput, 0, byteInput.Length)
	If cipher(cipher.Length - 1) = ControlChars.NullChar Then
		cipher = cipher.Substring(0, cipher.Length - 1)
	End If
	Return cipher
End Function

* Sedangkan proses dekripsi utama algoritma TEA adalah sebagai berikut

Private Sub decode(v As UInteger(), k As UInteger())
	Dim y As UInteger = v(0)
	Dim z As UInteger = v(1)
	Dim sum As UInteger
	Dim delta As UInteger = &H9E3779B9UI
	Dim n As UInteger = 32

	sum = delta << 5

	While n > 0
		z -= (y << 4) + k(2) Xor y + sum Xor (y >> 5) + k(3)
		y -= (z << 4) + k(0) Xor z + sum Xor (z >> 5) + k(1)
		sum -= delta

		n -= 1
	End While

	v(0) = y
	v(1) = z
End Sub


Hasil akhir adalah: (klik untuk perbesar gambar)

cmd121a

cmd121b


Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

11 pemikiran di “Algoritma TEA (Tiny Encryption Algorithm)

    • pip Penulis

      Jika anda membutuhkan referensi jurnal, maka dapat anda lakukan melalui google. Disini saya hanya membagikan implementasi algoritma yang sudah saya pelajari.

  • aff

    sangat membantu untuk tugas akhir saya, saya ingin dijelaskan bagian dekripsi pas bagian ini kurang paham
    Dim byteInput As Byte() = New Byte(input.Length / 8 * 2 – 1) {}
    For i As Integer = 0 To input.Length – 1 Step 8
    tempData(0) = StrToUint(input.Substring(i, 4))
    tempData(1) = StrToUint(input.Substring(i + 4, 4))
    decode(tempData, formattedKey)

    byteInput(x) = CByte(tempData(0))
    x += 1
    byteInput(x) = CByte(tempData(1))
    x += 1

      • pip Penulis

        Pada intinya proses enkripsi algoritma ini menghasilkan karakter dengan jumlah kelipatan 8 dari jumlah karakter input, sehingga dalam proses dekripsi proses pembacaannya dilakukan dengan membaca 8 karakter sekaligus. Pada saat membaca 8 karakter, datanya dipisah menjadi 4 karakter pertama dan 4 karakter kedua, kemudian kedua 4 karakter tersebut di decode dan dimasukkan kembali sebagai jawaban teks asli.

        • aff

          jadi, kenapa array dari byteinput harus dibagi 8*2-1 ? apa karena saat mengenkripsi dari satu karakter length = 16 ?
          lalu,saat cipher += UIntToStr(tempData(0)) + UIntToStr(tempData(1)), yang temp data 1 ko tidak ke translasi ya hanya yang 0 saja, kira2 kenapa ya ?
          terimakasih

        • pip Penulis

          Jadi pada saat proses enkripsi, dalam sekali proses akan dibaca 2 karakter yang diencode menjadi 8 karakter. Dan sebelumnya karakter input akan ditambahkan karakter kosong agar jumlah karakternya selalu bernilai genap. Sebagai contoh, jika ada 9 karakter input, maka hasil enkripsi akan berjumlah (9+1)*8/2 = 40 karakter.
          Pada saat dekripsi, dalam sekali proses akan dibaca 8 karakter sekaligus dan menghasilkan 2 karakter teks asli, sehingga total proses pembacaan adalah (40/8*2-1) = 9 karakter.

          tempData(1) tetap terenkripsi pada saat proses encode. Jika tidak maka proses decodenya akan menghasilkan nilai lain dan menyebabkan error.

  • sailor

    cipher += UIntToStr(tempData(0)) + UIntToStr(tempData(1))
    pada bagian itu, nilai dari tempdata(0) dan tempdata (1) terjumlahkan secara angka tidak sebagai string, padahal sudah di convert ke string. gimana ya mengatasinya

    • pip Penulis

      Dalam proses ini seharusnya memang yang dijumlahkan adalah string. Untuk operasi string anda bisa coba untuk mengganti tanda + dengan tanda &
      cipher &= UIntToStr(tempData(0)) & UIntToStr(tempData(1))