ASP adalah bahasa pemrograman web yang ketinggalan jaman, tapi masih banyak yang digunakan dalam dunia internet sekarang. Microsoft sudah menyediakan ASP .Net sebagai upgrade, tapi karena kerumitannya, ASP classic masih tetap digunakan sebagai alternatif dari kesederhanaan PHP.

ASP adalah bahasa yang terlalu sederhana sehingga malah jadi membingungkan dalam implementasinya. Meskipun begitu, ASP banyak memiliki kekurangan fungsi yang harus kita buat sendiri. Salah satunya adalah masalah enkripsi/ dekripsi.

Dengan artikel ini, kita akan membuat sebuah cara yang paling mudah sederhana tapi aman untuk melakukan enkripsi data string, tetapi dimungkinan untuk melakukan dekripsi kembali untuk mendapatkan string yang kita sembunyikan. Hal ini misalkan bisa untuk mengenkripsi parameter url yang kita kirimkan kepada pelanggan lewat email atau mengenkripsi nomor kartu kredit di database. Enkripsi yang kita gunakan adalah base64.

caranya:
- Buat file func.asp untuk menyimpan fungsi asp yang kita buat

<%
 
'File fungsi func.asp
 
	'Function for encode string
	Public Function base64_encode( byVal strIn )
		Dim c1, c2, c3, w1, w2, w3, w4, n, strOut
		For n = 1 To Len( strIn ) Step 3
			c1 = Asc( Mid( strIn, n, 1 ) )
			c2 = Asc( Mid( strIn, n + 1, 1 ) + Chr(0) )
			c3 = Asc( Mid( strIn, n + 2, 1 ) + Chr(0) )
			w1 = Int( c1 / 4 ) : w2 = ( c1 And 3 ) * 16 + Int( c2 / 16 )
			If Len( strIn ) >= n + 1 Then 
				w3 = ( c2 And 15 ) * 4 + Int( c3 / 64 ) 
			Else 
				w3 = -1
			End If
			If Len( strIn ) >= n + 2 Then 
				w4 = c3 And 63 
			Else 
				w4 = -1
			End If
			strOut = strOut + mimeencode( w1 ) + mimeencode( w2 ) + _
					  mimeencode( w3 ) + mimeencode( w4 )
		Next
		base64_encode = strOut
	End Function
 
	Private Function mimeencode( byVal intIn )
		Base64Chars =	"ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
		"abcdefghijklmnopqrstuvwxyz" & _
		"0123456789+/"
 
		If intIn >= 0 Then 
			mimeencode = Mid( Base64Chars, intIn + 1, 1 ) 
		Else 
			mimeencode = ""
		End If
	End Function	
 
	'Function for decode string back
	Public Function base64_decode( byVal strIn )
		Dim w1, w2, w3, w4, n, strOut
		For n = 1 To Len( strIn ) Step 4
			w1 = mimedecode( Mid( strIn, n, 1 ) )
			w2 = mimedecode( Mid( strIn, n + 1, 1 ) )
			w3 = mimedecode( Mid( strIn, n + 2, 1 ) )
			w4 = mimedecode( Mid( strIn, n + 3, 1 ) )
			If w2 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w1 * 4 + Int( w2 / 16 ) ) And 255 ) )
			If w3 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w2 * 16 + Int( w3 / 4 ) ) And 255 ) )
			If w4 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w3 * 64 + w4 ) And 255 ) )
		Next
		base64_decode = strOut
	End Function
 
	Private Function mimedecode( byVal strIn )
		Base64Chars =	"ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
		"abcdefghijklmnopqrstuvwxyz" & _
		"0123456789+/"
 
		If Len( strIn ) = 0 Then 
			mimedecode = -1 : Exit Function
		Else
			mimedecode = InStr( Base64Chars, strIn ) - 1
		End If
	End Function
 
	'Function for split parameter keys and values
	function getparam(param)
		Dim Dictionary
		Set Dictionary=Server.CreateObject("Scripting.Dictionary")
		WordArray=Split(param,"&")
		for i = 0 to UBound(WordArray)
			WordArray1 = Split(WordArray(i),"=")
			Dictionary.add WordArray1(0), WordArray1(1)
		next
		set getparam = Dictionary
	end function
 
%>

- Kemudian buat halaman test.asp untuk melihat hasilnya dengan meng-include file fungsi yang sudah kita buat

<%
	<!--# include file="func.asp"-->
	'Testing Page
	'Encode parameters
	parameters = "credit_card_number=" & "378282246310005&" & "user=" & "me@om4g.us"
	response.write " Parameters: " & parameters & "<br/>"
	encoded_parameters = base64_encode(parameters)
	response.write " Encoded Parameters: " & encoded_parameters & "<br/>"
	decoded_parameters = base64_decode(encoded_parameters)
	response.write " Decoded Parameters: " & decoded_parameters & "<br/>"
	set splitted_parameters = getparam(decoded_parameters)
	response.write "All of parameters:<br/>"
	for each key in splitted_parameters.keys
		response.write ">>&nbsp;" & key & "&nbsp;is&nbsp;" & splitted_parameters(key) & "<br/>"
	next 
	response.write "Get one parameter: credit_card_number&nbsp;is&nbsp;" & splitted_parameters("credit_card_number") & "<br/>"
 
%>

Selesai