Transformasi Base64 dalam Kriptografi


Transformasi Base64 adalah salah satu algoritma untuk encoding dan decoding suatu data kedalam format ASCI, yang di dasarkan pada bilangan 64. karakter yang dihasilkan dari Base64 teridiri dari A-Z , a-z dan 0..9, serta ditambah dengan 2 karakter terakhir yang bersimbol. Karakter simbol ini tergantung dari Algoritma yang digunakan.

Dalam materi Kriptografi Transformasi Base64 banyak digunakan di dunia internet sebagai media data format utnutk mengirimkan data, ini dikarenakan hasil dari Base64 berupa Palintext, maka data ini akan jauh lebih mudah dikirim, dibandingkan dengan format data yang berupa bineri.

Dalam Impleentasinya saya akan coba memberikan beberapa contoh dalam Transformasi Base64, yang antara lain adalah PEM, MIME, UTF-7, dan OpenPGP.

-PEM (Privacy-Enhaced Mail) adalah protokol pertama dengan teknik Base64 yang didasarkan pada RFC 989, yang terdiri dari 7 karakter (7-bit) yang digunakan pada SMTP dalam transfer data tapi untuk sekarang PEM sudah tidak menggunakan RFC 989 tapi sudah di ganti dengan RFC 1421 yang menggukana karakter A_Z, a-z, 0..9.

-MIME (Multi Purpose Mail Extension) didasarkan pada RFC 2045. Teknik encoding Base64 MIME, mempunyai konsep yang berdasarkan RFC 1421 versi PEM. Sedangkan MIME diakhiri dengan Padding “=” pada hasil akhir encodingnya.

-UTF-7 didasarkan pada RFC 2152, yang umumnya disebut “MODIFICATION BASE” UTF-7 menggunakan karakter MIME, tidak memakai padding”=”, karakter “=” digunakan sebagia escape untuk encoding.

-OpenPGP (PGP Prety Good Privacy) dirancang pada RFC 2440, yang menggukan Coding 64 Radix atau ASCI Amor. Teknik encodingnya didasarakan pada MIME tetapi ditambah dengan 24 bit CRC Cheksum. Nilai Cheksum dihitung dari data Input sebelum dilakukan Proses Encoding.

Contoh Transformasi Base64 dari plaintext “Hanjian” adalah “SGFuamlhbg==”. Untuk melakukan konversi kemabli dilakukan dengan cara yang sama untuk mendapatkan decoding nya seperti proses Konversi semula.

Implementasi Base64 pada Pemograman ASSEMBLY, transformasi BASE64 juga bisa dilakukan.

Ini adalah beberapa Code untuk Transformasi Base64

==========Mulai=============
encodeblock proc lpIn:DWORD, lpOut:DWORD, dwLen:DWORD
LOCAL InBuf:DWORD
pushad

mov esi, lpIn

mov [InBuf], 0 ;reset
lea edi, InBuf
mov ecx, dwLen
rep movsb
mov eax, [InBuf]
bswap eax
shr eax, 8

mov edi, lpOut

mov ebx, eax

mov cl, 18
mov edx, 111111000000000000000000b

@@:
mov eax, ebx
and eax, edx
shr eax, cl
mov al, byte ptr [base64][eax]
stosb
sub cl, 6
shr edx, 6
jnz @b

mov ecx, dwLen
cmp ecx, 1
ja @f
mov word ptr [edi-2], '='
@@:
cmp ecx, 2
ja @f
mov word ptr [edi-1], '='
@@:
popad
ret

encodeblock endp


decodeblock proc uses ecx ebx edi esi lpIn:DWORD, dwLen:DWORD
LOCAL InBuf:DWORD, Len:DWORD

or dwLen, 0
jz @enddecode

mov Len, 0
mov esi, lpIn
mov edi, esi

@next4bytes:
xor ecx, ecx

.while ecx <>
lodsb
.if al >= 'A' && al <= 'Z'
sub al, 'A'
.elseif al >='a' && al <= 'z'
sub al, 71
.elseif al >='0' && al <= '9'
add al, 4
.elseif al == '/'
add al, 16
.elseif al == '+'
add al, 19
.elseif al == '='
xor al, al
.else
jmp @f
.endif
stosb
inc ecx
@@:
inc Len
mov eax, Len
cmp eax, dwLen
ja @enddecode
.endw

@@:

mov edx, esi
xor ebx, ebx
;xor eax, eax
mov ecx, 4
sub edi, ecx
mov esi, edi ;save esi

@@:
lodsb
shl ebx, 6
or bl, al
dec ecx
jnz @b

mov eax, ebx
shl eax, 8
bswap eax
stosd
dec edi
mov esi, edx ;restore esi

mov eax, Len
cmp eax, dwLen
jb @next4bytes

@enddecode:
ret

decodeblock endp


Encode proc uses ecx ebx edi esi lpBuffer:DWORD, lpOut:DWORD, dwLen:DWORD
LOCAL Len:DWORD
LOCAL BufIn[4]:BYTE
LOCAL BufOut[5]:BYTE

mov eax, lpOut
and byte ptr [eax], 0

mov esi, lpBuffer
mov Len, 0

@@:
lea edi, BufIn

xor ecx, ecx
.while ecx <>
mov eax, Len
.if eax <>
lodsb
stosb
.else
jmp @endoffile
xor al, al
stosb
.endif
inc ecx
inc Len
.endw

@endoffile:
lea eax, BufIn
lea ebx, BufOut
invoke encodeblock, eax, ebx, ecx
and byte ptr [ebx+4], 0
invoke lstrcat, lpOut, ebx
mov eax, Len
cmp eax, dwLen
jb @b
ret
Encode endp
===========Selesai==============

Kode diatas menunjukkan encoding dan decoding dengan Transformasi Base64.

Untuk yang tidak mau menulis Kode di atas anda bisa mendownload Projectnya disini.

Download Here Project, Application and Source Code for Transformation Base64

Semoga bermanfaat dan Gunakan dengan seperlunya.

salam,

Hanjian
Artikel by Hanjian

1 Response to "Transformasi Base64 dalam Kriptografi"
arammanalu said :
7 Juni 2009 pukul 02.44
kalo untuk mengamankan data base php gimanaya mas..?

Posting Komentar