CarlD Posted September 7, 2020 Posted September 7, 2020 (edited) Here is my GUI wrapper for the hashing functions in TheXman's excellent CryptoNG UDF, which implements some of Microsoft's Cryptography API: Next Generation (CNG) Win32 API functions. Comments and suggestions are welcome! Many thanks to TheXman for his comments on earlier versions of this script. expandcollapse popup; GUI wrapper for TheXMan's CryptoNG hashing functions ; CLD rev. 2020-10-03 #include "CryptoNG.au3" #include <ButtonConstants.au3> #include <FontConstants.au3> #include <GUIConstants.au3> #include <MsgBoxConstants.au3> AutoItSetOption("MustDeclareVars", 1) Global $sDefaultAlg = "SHA256" Global $aHashAlgs = _CryptoNG_EnumAlgorithms($CNG_BCRYPT_HASH_OPERATION) Global $sHashAlgs = "", $sAlg = "(none)" For $i = 0 To UBound($aHashAlgs) - 1 If $aHashAlgs[$i] <> $sDefaultAlg And Not StringInStr($aHashAlgs[$i], "AES") Then $sHashAlgs &= $aHashAlgs[$i] & "|" Else ContinueLoop EndIf Next $sHashAlgs = StringTrimRight($sHashAlgs, 1) Global $sProviders = "", $sSelectedProvider = "" Global $aHashProv = _CryptoNG_EnumRegisteredProviders() For $i = 0 To UBound($aHashProv) - 1 $sProviders &= $aHashProv[$i] & "|" Next $sProviders = StringTrimRight($sProviders, 1) Global $sInput = "", $vOutput = "", $bErr = 0 Global $bHMAC = 0, $sHMACpw = "" Global $vSalt = "", $iIters = 0, $iDKeyBitLen = 0 Global $sKeyBitLens = "", $iX = 7 For $i = 8 To 64 $sKeyBitLens &= String($i * 8) & "|" Next $sKeyBitLens = StringTrimRight($sKeyBitLens, 1) ; GUI interface ; ------------- Global $hgHHr = GUICreate("CryptoNG Hasher", 965, 455, -1, -1, $WS_EX_APPWINDOW) GUISetFont(10, $FW_SEMIBOLD, $GUI_FONTNORMAL, "", $hgHHr, $ANTIALIASED_QUALITY) GUICtrlCreateLabel("Hash type", 25, 10, 110, 20) Global $hgAlg = GUICtrlCreateCombo("SHA256", 25, 35, 110, 25, -1, $ES_RIGHT) GUICtrlSetData($hGAlg, $sHashAlgs, "") GUICtrlCreateLabel("Provider", 150, 10, 160, 20) Global $hgProv = GUICtrlCreateCombo("default", 150, 35, 355, 25) GUICtrlSetData($hgProv, $sProviders, "") Global $hgHMACch = GUICtrlCreateCheckBox("HMAC", 515, 35, 85, 25) GUICtrlSetState($hgHMACch, $GUI_UNCHECKED) GUICtrlCreateLabel("pw: ", 600, 35, 25, 25) Global $hgHMACpw = GUICtrlCreateInput("", 635, 35, 300, 25) GUICtrlSetState($hgHMACpw, $GUI_DISABLE) GUICtrlCreateLabel("Input: ", 25, 75, 40, 20) Global $hgStrIn = GUICtrlCreateEdit("", 25, 100, 910, 60, $WS_VSCROLL+$ES_AUTOVSCROLL) GUICtrlSetState($hgStrIn, $GUI_ENABLE+$GUI_FOCUS) GUICtrlSetData($hgStrIn, "") Global $hgStrB = GUICtrlCreateRadio("string", 25, 165, 75, 25) Global $hgFnmB = GUICtrlCreateRadio("filename", 110, 165, 100, 25) Global $hgPBKB = GUICtrlCreateRadio("password (PBKDF2)", 215, 165, 190, 25) GUICtrlSetState($hgStrB, $GUI_ENABLE + $GUI_CHECKED) GUICtrlSetState($hgFnmB, $GUI_ENABLE + $GUI_UNCHECKED) GUICtrlSetState($hgPBKB, $GUI_ENABLE + $GUI_UNCHECKED) GUICtrlCreateLabel("salt: ", 45, 200, 30, 25) Global $hgPBKDFisalt = GUICtrlCreateInput("", 85, 200, 260, 25) GUICtrlCreateLabel("key bit length: ", 355, 200, 120, 25) Global $hgPBKDFikyln = GUICtrlCreateCombo("", 475, 200, 60, 25) GUICtrlSetData($hgPBKDFikyln, $sKeyBitLens, "") GUICtrlCreateLabel("iterations: ", 550, 200, 135, 25) Global $hgPBKDFiiter = GUICtrlCreateInput("", 650, 200, 110, 25) GUICtrlSetState($hgPBKDFisalt, $GUI_DISABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_DISABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_DISABLE) GUICtrlCreateLabel("Hash copied to clipboard:", 25, 250, 220, 20) Global $hgBiOut = GUICtrlCreateEdit("", 25, 280, 910, 60, $WS_VSCROLL+$ES_AUTOVSCROLL) GUICtrlSetState($hgBiOut, $GUI_ENABLE) Global $hgStart = GUICtrlCreateButton("HASH", 375, 363, 85, 40, $BS_DEFPUSHBUTTON) GUICtrlSetState($hgStart, $GUI_ENABLE) Global $hgClear = GUICtrlCreateButton("Clear form", 480, 363, 100, 40) GUICtrlSetState($hgClear, $GUI_ENABLE) GUISetState(@SW_SHOW, $hgHHr) While 1 Switch GUIGetMsg() Case $hgAlg $sAlg = GUICtrlRead($hgAlg) Case $hgHMACch If GUICtrlRead($hgHMACch) = $GUI_CHECKED Then GUICtrlSetState($hgHMACpw, $GUI_ENABLE) Else GUICtrlSetState($hgHMACpw, $GUI_DISABLE) EndIf GUICtrlSetState($hgStrIn, $GUI_FOCUS) Case $hgStrB If GUICtrlRead($hgStrB) = $GUI_CHECKED Then GUICtrlSetState($hgPBKDFisalt, $GUI_DISABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_DISABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_DISABLE) Else GUICtrlSetState($hgPBKDFisalt, $GUI_ENABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_ENABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_ENABLE) EndIf GUICtrlSetState($hgStrIn, $GUI_FOCUS) Case $hgFnmB If GUICtrlRead($hgFnmB) = $GUI_CHECKED Then GUICtrlSetState($hgPBKDFisalt, $GUI_DISABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_DISABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_DISABLE) Else GUICtrlSetState($hgPBKDFisalt, $GUI_ENABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_ENABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_ENABLE) EndIf GUICtrlSetState($hgStrIn, $GUI_FOCUS) Case $hgPBKB If GUICtrlRead($hgPBKB) = $GUI_CHECKED Then GUICtrlSetState($hgPBKDFisalt, $GUI_ENABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_ENABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_ENABLE) Else GUICtrlSetState($hgPBKDFisalt, $GUI_DISABLE) GUICtrlSetState($hgPBKDFikyln, $GUI_DISABLE) GUICtrlSetState($hgPBKDFiiter, $GUI_DISABLE) EndIf GUICtrlSetState($hgStrIn, $GUI_FOCUS) Case $hgStart If Not GUICtrlRead($hgStrIn) Then GUICtrlSetState($hgStrIn, $GUI_FOCUS) ContinueLoop EndIf GUICtrlSetData($hgBiOut, "") $sAlg = GUICtrlRead($hgAlg) If Not $sAlg Then MsgBox(0, @ScriptName, "Select a hash type") GUICtrlSetState($hgAlg, $GUI_FOCUS) ContinueLoop EndIf $sSelectedProvider = GUICtrlRead($hgProv) If Not $sSelectedProvider Or $sSelectedProvider = "default" Then $sSelectedProvider = Default If GUICtrlRead($hgHMACch) = $GUI_CHECKED Then $bHMAC = 1 $sHMACpw = GUICtrlRead($hgHMACpw) If Not $sHMACpw Then MsgBox($MB_ICONINFORMATION, @ScriptName, "Missing HMAC password") GUICtrlSetState($hgHMACpw, $GUI_FOCUS) ContinueLoop EndIf EndIf $sInput = GUICtrlRead($hgStrIn) If Not $sInput Then ContinueLoop If GUICtrlRead($hgPBKB) = $GUI_CHECKED Then $vSalt = GUICtrlRead($hgPBKDFisalt) $iIters = GUICtrlRead($hgPBKDFiiter) $iDKeyBitLen = GUICtrlRead($hgPBKDFikyln) EndIf $bErr = 0 If GUICtrlRead($hgStrB) = $GUI_CHECKED Then $vOutPut = _CryptoNG_HashData($sAlg, $sInput, $bHMAC, $sHMACpw, $sSelectedProvider) If @error Then $bErr = 1 ElseIf GUICtrlRead($hgFnmB) = $GUI_CHECKED Then If FileExists($sInput) Then $vOutPut = _CryptoNG_HashFile($sAlg, $sInput, $bHMAC, $sHMACpw, $sSelectedProvider) If @error Then $bErr = 1 Else MsgBox($MB_ICONINFORMATION, @ScriptName, "File """ & $sInput & """ does not exist!") GUICtrlSetState($hgStrIn, $GUI_FOCUS) ContinueLoop EndIf ElseIf GUICtrlRead($hgPBKB) = $GUI_CHECKED Then If Not $vSalt Then MsgBox($MB_ICONINFORMATION, @ScriptName, "Missing salt") GUICtrlSetState($hgPBKDFisalt, $GUI_FOCUS) ContinueLoop EndIf If Not $iDKeyBitLen Then MsgBox($MB_ICONINFORMATION, @ScriptName, "Missing key bit length") GUICtrlSetState($hgPBKDFiiter, $GUI_FOCUS) ContinueLoop EndIf If Not $iIters Then MsgBox($MB_ICONINFORMATION, @ScriptName, "Missing number of iterations") GUICtrlSetState($hgPBKDFiiter, $GUI_FOCUS) ContinueLoop EndIf $vOutPut = _CryptoNG_PBKDF2($sInput, $vSalt, $iIters, $iDKeyBitLen, $sAlg, $sSelectedProvider) If @error Then $bErr = 1 Else ContinueLoop EndIf If $bErr Then MsgBox($MB_ICONINFORMATION, @ScriptName, _CryptoNG_LastErrorMessage()) GUICtrlSetState($hgStrIn, $GUI_FOCUS) EndIf If $vOutPut Then ClipPut($vOutPut) GUICtrlSetData($hgBiOut, $vOutPut) Sleep(50) Send("{home}") GUICtrlSetState($hgStrIn, $GUI_FOCUS) $sAlg = "" $sInput = "" $bHMAC = 0 $sHMACpw = "" $sSelectedProvider = "" $vSalt = "" $iIters = "" $iDKeyBitLen = 0 Case $hgClear GUICtrlSetData($hgStrIn, "") GUICtrlSetData($hgBiOut, "") GUICtrlSetState($hgStrIn, $GUI_FOCUS) Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE, $hgHHr) Exit EndSwitch WEnd Exit ; Edited October 3, 2020 by CarlD
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now