$PBExportHeader$w_main.srw forward global type w_main from window end type type cb_encrypt_b64 from commandbutton within w_main end type type cb_currentgmt from commandbutton within w_main end type type st_8 from statictext within w_main end type type st_7 from statictext within w_main end type type sle_vector from singlelineedit within w_main end type type cb_hash_b64 from commandbutton within w_main end type type cb_hmac_b64 from commandbutton within w_main end type type cbx_hexencrypt from checkbox within w_main end type type cb_hashfile from commandbutton within w_main end type type st_6 from statictext within w_main end type type ddlb_encrypt_algorithm from dropdownlistbox within w_main end type type cb_encrypt from commandbutton within w_main end type type cb_random from commandbutton within w_main end type type st_5 from statictext within w_main end type type cb_hmac from commandbutton within w_main end type type cb_hash from commandbutton within w_main end type type st_4 from statictext within w_main end type type ddlb_hash_algorithm from dropdownlistbox within w_main end type type cb_base64 from commandbutton within w_main end type type st_2 from statictext within w_main end type type sle_password from singlelineedit within w_main end type type sle_result from singlelineedit within w_main end type type st_3 from statictext within w_main end type type st_1 from statictext within w_main end type type sle_message from singlelineedit within w_main end type type cb_cancel from commandbutton within w_main end type end forward global type w_main from window integer width = 3013 integer height = 1236 boolean titlebar = true string title = "Cryptography API: Next Generation (CNG)" boolean controlmenu = true long backcolor = 67108864 string icon = "AppIcon!" boolean center = true cb_encrypt_b64 cb_encrypt_b64 cb_currentgmt cb_currentgmt st_8 st_8 st_7 st_7 sle_vector sle_vector cb_hash_b64 cb_hash_b64 cb_hmac_b64 cb_hmac_b64 cbx_hexencrypt cbx_hexencrypt cb_hashfile cb_hashfile st_6 st_6 ddlb_encrypt_algorithm ddlb_encrypt_algorithm cb_encrypt cb_encrypt cb_random cb_random st_5 st_5 cb_hmac cb_hmac cb_hash cb_hash st_4 st_4 ddlb_hash_algorithm ddlb_hash_algorithm cb_base64 cb_base64 st_2 st_2 sle_password sle_password sle_result sle_result st_3 st_3 st_1 st_1 sle_message sle_message cb_cancel cb_cancel end type global w_main w_main type variables n_bcrypt in_bc end variables on w_main.create this.cb_encrypt_b64=create cb_encrypt_b64 this.cb_currentgmt=create cb_currentgmt this.st_8=create st_8 this.st_7=create st_7 this.sle_vector=create sle_vector this.cb_hash_b64=create cb_hash_b64 this.cb_hmac_b64=create cb_hmac_b64 this.cbx_hexencrypt=create cbx_hexencrypt this.cb_hashfile=create cb_hashfile this.st_6=create st_6 this.ddlb_encrypt_algorithm=create ddlb_encrypt_algorithm this.cb_encrypt=create cb_encrypt this.cb_random=create cb_random this.st_5=create st_5 this.cb_hmac=create cb_hmac this.cb_hash=create cb_hash this.st_4=create st_4 this.ddlb_hash_algorithm=create ddlb_hash_algorithm this.cb_base64=create cb_base64 this.st_2=create st_2 this.sle_password=create sle_password this.sle_result=create sle_result this.st_3=create st_3 this.st_1=create st_1 this.sle_message=create sle_message this.cb_cancel=create cb_cancel this.Control[]={this.cb_encrypt_b64,& this.cb_currentgmt,& this.st_8,& this.st_7,& this.sle_vector,& this.cb_hash_b64,& this.cb_hmac_b64,& this.cbx_hexencrypt,& this.cb_hashfile,& this.st_6,& this.ddlb_encrypt_algorithm,& this.cb_encrypt,& this.cb_random,& this.st_5,& this.cb_hmac,& this.cb_hash,& this.st_4,& this.ddlb_hash_algorithm,& this.cb_base64,& this.st_2,& this.sle_password,& this.sle_result,& this.st_3,& this.st_1,& this.sle_message,& this.cb_cancel} end on on w_main.destroy destroy(this.cb_encrypt_b64) destroy(this.cb_currentgmt) destroy(this.st_8) destroy(this.st_7) destroy(this.sle_vector) destroy(this.cb_hash_b64) destroy(this.cb_hmac_b64) destroy(this.cbx_hexencrypt) destroy(this.cb_hashfile) destroy(this.st_6) destroy(this.ddlb_encrypt_algorithm) destroy(this.cb_encrypt) destroy(this.cb_random) destroy(this.st_5) destroy(this.cb_hmac) destroy(this.cb_hash) destroy(this.st_4) destroy(this.ddlb_hash_algorithm) destroy(this.cb_base64) destroy(this.st_2) destroy(this.sle_password) destroy(this.sle_result) destroy(this.st_3) destroy(this.st_1) destroy(this.sle_message) destroy(this.cb_cancel) end on event open;ddlb_hash_algorithm.SelectItem(1) ddlb_encrypt_algorithm.SelectItem(1) end event type cb_encrypt_b64 from commandbutton within w_main integer x = 1975 integer y = 832 integer width = 407 integer height = 100 integer taborder = 110 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Encrypt / B64" end type event clicked;String ls_Algorithm, ls_Message, ls_Password, ls_Vector String ls_Encrypted, ls_Decrypted, ls_Result ls_Algorithm = ddlb_encrypt_algorithm.text ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) sle_message.SetFocus() Return End If ls_Password = sle_password.text If ls_Password = "" Then MessageBox("Edit Error", "The password is required!", StopSign!) sle_password.SetFocus() Return End If ls_Vector = sle_vector.text If ls_Vector = "" Then MessageBox("Edit Error", "The vector is required!", StopSign!) sle_vector.SetFocus() Return End If sle_result.text = "" If cbx_hexencrypt.Checked Then ls_Encrypted = in_bc.of_EncryptHex(ls_Algorithm, ls_Message, ls_Password, ls_Vector) Else ls_Encrypted = in_bc.of_Encrypt(ls_Algorithm, ls_Message, ls_Password, ls_Vector) End If If IsNull(ls_Encrypted) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If // convert to base64 If Not in_bc.of_Base64Encode(ls_Encrypted, ls_Result) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = ls_Result end event type cb_currentgmt from commandbutton within w_main integer x = 1975 integer y = 992 integer width = 407 integer height = 100 integer taborder = 160 boolean bringtotop = true integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "GMT/UTC" end type event clicked;DateTime ldt_current Integer li_offset String ls_datetime ldt_current = in_bc.of_CurrentUTC() ls_datetime = String(ldt_current, & "ddd, dd mmm yyyy hh:mm:ss") + " GMT" MessageBox( this.text, & "The current time is: " + ls_datetime) end event type st_8 from statictext within w_main integer x = 1243 integer y = 320 integer width = 1687 integer height = 164 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Vector is a public key used by Encrypt/Decrypt in conjunction with the secret password. Each algorithm requires it to be a different length, either 8 or 16 (AES). If the vector is too long, the extra is ignored." boolean focusrectangle = false end type type st_7 from statictext within w_main integer x = 73 integer y = 340 integer width = 187 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Vector:" boolean focusrectangle = false end type type sle_vector from singlelineedit within w_main integer x = 366 integer y = 328 integer width = 809 integer height = 84 integer taborder = 30 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 string text = "MyPublicCryptKey" integer limit = 16 borderstyle borderstyle = stylelowered! end type type cb_hash_b64 from commandbutton within w_main integer x = 1499 integer y = 832 integer width = 407 integer height = 100 integer taborder = 100 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Hash / B64" end type event clicked;Blob lblb_Message, lblb_HashResult String ls_Message, ls_Algorithm, ls_Result ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) Return End If ls_Algorithm = ddlb_hash_algorithm.text // not using the Ansi/Unicode option lblb_Message = Blob(ls_Message, EncodingAnsi!) // generate hash lblb_HashResult = in_bc.of_Hash(ls_Algorithm, lblb_Message) If IsNull(lblb_HashResult) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If // convert to base64 If Not in_bc.of_Base64Encode(lblb_HashResult, ls_Result) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = ls_Result end event type cb_hmac_b64 from commandbutton within w_main integer x = 1499 integer y = 992 integer width = 407 integer height = 100 integer taborder = 150 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "HMAC / B64" end type event clicked;// For maximum security, it is recommended that the secret key (password) // be the same length as the output of the chosen algorithm. If it is longer, // the value is truncated. If shorter, it is right filled with zeros. Blob lblb_Message, lblb_Password, lblb_HashResult String ls_Message, ls_Password, ls_Algorithm, ls_Result ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) Return End If ls_Password = sle_password.text If ls_Password = "" Then MessageBox("Edit Error", "The password is required!", StopSign!) Return End If ls_Algorithm = ddlb_hash_algorithm.text // not using the Ansi/Unicode option lblb_Message = Blob(ls_Message, EncodingAnsi!) lblb_Password = Blob(ls_Password, EncodingAnsi!) // generate hash with password lblb_HashResult = in_bc.of_HMAC(ls_Algorithm, lblb_Message, lblb_Password) If IsNull(lblb_HashResult) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If // convert to base64 If Not in_bc.of_Base64Encode(lblb_HashResult, ls_Result) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = ls_Result end event type cbx_hexencrypt from checkbox within w_main integer x = 1829 integer y = 564 integer width = 443 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Encrypt to Hex" end type type cb_hashfile from commandbutton within w_main integer x = 549 integer y = 992 integer width = 407 integer height = 100 integer taborder = 130 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Hash a File" end type event clicked;String ls_pathname, ls_filename, ls_Algorithm, ls_result Integer li_rc sle_result.text = "" li_rc = GetFileOpenName("Select a File", ls_pathname, ls_filename) If li_rc = 1 Then ls_Algorithm = ddlb_hash_algorithm.text ls_result = in_bc.of_HashFileToHex(ls_Algorithm, ls_pathname) If IsNull(ls_result) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = ls_result End If end event type st_6 from statictext within w_main integer x = 896 integer y = 564 integer width = 462 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Encrypt Algorithm:" alignment alignment = right! boolean focusrectangle = false end type type ddlb_encrypt_algorithm from dropdownlistbox within w_main integer x = 1390 integer y = 552 integer width = 334 integer height = 540 integer taborder = 50 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 boolean sorted = false boolean vscrollbar = true string item[] = {"AES","DES","DESX","RC2","3DES","3DES_112"} borderstyle borderstyle = stylelowered! end type type cb_encrypt from commandbutton within w_main integer x = 1024 integer y = 832 integer width = 407 integer height = 100 integer taborder = 90 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Encrypt" end type event clicked;// This demonstrates encryption and decryption. You have the option of converting the encrypted string // to a hex string by using of_EncryptHex & of_DecryptHex. You can also use blobs with of_Encrypt & of_Decrypt. // // Arguments: // // ls_Algorithm This is the encryption algorithm to be used, AES for example. // // ls_Message This is the value that you want to be encrypted. // // ls_Password This is the secret password used to encrypt & decrypt the message. // // ls_Vector This is the Initialization Vector (Salt). After encryption you will need to store or // transmit this along with the encrypted message. It can be sent in plain text. Its // purpose is to cause the same message/password to result in a different encrypted string. String ls_Algorithm, ls_Message, ls_Password, ls_Vector String ls_Encrypted, ls_Decrypted ls_Algorithm = ddlb_encrypt_algorithm.text ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) sle_message.SetFocus() Return End If ls_Password = sle_password.text If ls_Password = "" Then MessageBox("Edit Error", "The password is required!", StopSign!) sle_password.SetFocus() Return End If ls_Vector = sle_vector.text If ls_Vector = "" Then MessageBox("Edit Error", "The vector is required!", StopSign!) sle_vector.SetFocus() Return End If sle_result.text = "" If cbx_hexencrypt.Checked Then ls_Encrypted = in_bc.of_EncryptHex(ls_Algorithm, ls_Message, ls_Password, ls_Vector) Else ls_Encrypted = in_bc.of_Encrypt(ls_Algorithm, ls_Message, ls_Password, ls_Vector) End If If IsNull(ls_Encrypted) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If If cbx_hexencrypt.Checked Then ls_Decrypted = in_bc.of_DecryptHex(ls_Algorithm, ls_Encrypted, ls_Password, ls_Vector) Else ls_Decrypted = in_bc.of_Decrypt(ls_Algorithm, ls_Encrypted, ls_Password, ls_Vector) End If If IsNull(ls_Decrypted) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If If ls_Decrypted = ls_Message Then sle_result.text = ls_Encrypted Else MessageBox("Encrypt Failed", & "Decrypted string does not equal the encrypted text!", StopSign!) End If end event type cb_random from commandbutton within w_main integer x = 73 integer y = 992 integer width = 407 integer height = 100 integer taborder = 120 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Random Nbr" end type event clicked;ULong lul_Random lul_Random = in_bc.of_RandomNbr() If IsNull(lul_Random) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = String(lul_Random) end event type st_5 from statictext within w_main integer x = 2121 integer y = 212 integer width = 773 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Used by HMAC/Encrypt/Decrypt" boolean focusrectangle = false end type type cb_hmac from commandbutton within w_main integer x = 549 integer y = 832 integer width = 407 integer height = 100 integer taborder = 80 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "HMAC" end type event clicked;// For maximum security, it is recommended that the secret key (password) // be the same length as the output of the chosen algorithm. If it is longer, // the value is truncated. If shorter, it is right filled with zeros. Blob lblb_result String ls_Message, ls_Password, ls_Algorithm, ls_Result ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) Return End If ls_Password = sle_password.text If ls_Password = "" Then MessageBox("Edit Error", "The password is required!", StopSign!) Return End If ls_Algorithm = ddlb_hash_algorithm.text lblb_result = in_bc.of_HMAC(ls_Algorithm, ls_Message, ls_Password) If IsNull(lblb_result) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = in_bc.of_Blob2Hex(lblb_result) end event type cb_hash from commandbutton within w_main integer x = 73 integer y = 832 integer width = 407 integer height = 100 integer taborder = 70 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Hash" end type event clicked;String ls_Message, ls_Algorithm, ls_Result ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) Return End If ls_Algorithm = ddlb_hash_algorithm.text ls_Result = in_bc.of_HashToHex(ls_Algorithm, ls_Message) If IsNull(ls_Result) Then MessageBox(in_bc.LastFunction + " Failed", & in_bc.LastErrText, StopSign!) Return End If sle_result.text = ls_Result end event type st_4 from statictext within w_main integer x = 73 integer y = 564 integer width = 402 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Hash Algorithm:" boolean focusrectangle = false end type type ddlb_hash_algorithm from dropdownlistbox within w_main integer x = 475 integer y = 552 integer width = 334 integer height = 540 integer taborder = 40 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 boolean sorted = false boolean vscrollbar = true string item[] = {"SHA1","SHA256","SHA384","SHA512","MD2","MD5"} borderstyle borderstyle = stylelowered! end type type cb_base64 from commandbutton within w_main integer x = 1024 integer y = 992 integer width = 407 integer height = 100 integer taborder = 140 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Base64" end type event clicked;Boolean lb_rc Blob lblob_Decoded String ls_Message, ls_Encoded, ls_Decoded ls_Message = sle_message.text If ls_Message = "" Then MessageBox("Edit Error", "The message is required!", StopSign!) Return End If lb_rc = in_bc.of_Base64Encode(ls_Message, ls_Encoded) sle_result.text = ls_Encoded lb_rc = in_bc.of_Base64Decode(ls_Encoded, ls_Decoded) If ls_Decoded <> ls_Message Then MessageBox(this.text, "Decoded <> Message!") End If end event type st_2 from statictext within w_main integer x = 73 integer y = 212 integer width = 265 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Password:" boolean focusrectangle = false end type type sle_password from singlelineedit within w_main integer x = 366 integer y = 200 integer width = 1687 integer height = 84 integer taborder = 20 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 string text = "MySecretKey" borderstyle borderstyle = stylelowered! end type type sle_result from singlelineedit within w_main integer x = 366 integer y = 680 integer width = 2565 integer height = 84 integer taborder = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 boolean displayonly = true borderstyle borderstyle = stylelowered! end type type st_3 from statictext within w_main integer x = 73 integer y = 692 integer width = 178 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Result:" boolean focusrectangle = false end type type st_1 from statictext within w_main integer x = 73 integer y = 84 integer width = 247 integer height = 60 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 long backcolor = 67108864 string text = "Message:" boolean focusrectangle = false end type type sle_message from singlelineedit within w_main integer x = 366 integer y = 72 integer width = 2565 integer height = 84 integer taborder = 10 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" long textcolor = 33554432 string text = "PowerBuilder Rules!" borderstyle borderstyle = stylelowered! end type type cb_cancel from commandbutton within w_main integer x = 2523 integer y = 992 integer width = 407 integer height = 100 integer taborder = 170 integer textsize = -8 integer weight = 400 fontcharset fontcharset = ansi! fontpitch fontpitch = variable! fontfamily fontfamily = swiss! string facename = "Segoe UI" string text = "Cancel" boolean cancel = true end type event clicked;Close(Parent) end event
File: w_main.srw
Size: 24173
Date: Fri, 03 May 2019 20:52:14 +0200
Size: 24173
Date: Fri, 03 May 2019 20:52:14 +0200
- window w_main(srw)
- commandbutton cb_encrypt_b64
- commandbutton cb_currentgmt
- statictext st_8
- statictext st_7
- singlelineedit sle_vector
- commandbutton cb_hash_b64
- commandbutton cb_hmac_b64
- checkbox cbx_hexencrypt
- commandbutton cb_hashfile
- statictext st_6
- dropdownlistbox ddlb_encrypt_algorithm
- commandbutton cb_encrypt
- commandbutton cb_random
- statictext st_5
- commandbutton cb_hmac
- commandbutton cb_hash
- statictext st_4
- dropdownlistbox ddlb_hash_algorithm
- commandbutton cb_base64
- statictext st_2
- singlelineedit sle_password
- singlelineedit sle_result
- statictext st_3
- statictext st_1
- singlelineedit sle_message
- commandbutton cb_cancel