DonationCoder.com Software > Coding Snacks
Encode/decode cipher/decipher crypter/decrypter ASCII HEX Binary Base64 URL etc.
ashecorven:
Hello again,
Thanks for the quick response!
HEX to binary and vice-versa shouldn't have anything to do with ASCII. At the moment, both binary and HEX are being read in as ASCII (converting HEX to * == converting text to *) and (converting binary to * == converting text to *).
Examples.
11111111 00000000 00000000 11111111 should convert to FF00 00FF, but output is 31 31 31 31 31 31 31 31 20 30 30 30 30 30 30 30 30 20 30 30 30 30 30 30 30 30 20 31 31 31 31 31 31 31 31.
E.g. FF00 00FF should convert to 11111111 00000000 00000000 11111111, but output is 01000110 01000110 00110000 00110000 00100000 00110000 00110000 01000110 01000110.
I think a quick way to check if things are being read in correctly would be HEX->HEX, Binary->binary, text->text, etc. At the moment they're not working.
lifeweaver:
Thanks for the input it took me a bit but I think I have everything work, turned out that the base64 was really messed up for numbers it was treating everything as a string.
Spoiler
--- ---#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance ignore
Help(wParam, lParam, Msg)
{
MouseGetPos,,,, OutputVarControl
;~ IfEqual, OutputVarControl, Button1
;~ Help := "Will try to convert the input multiple times if detected as Hex/Binary."
ToolTip % Help
}
encodeUTF8( ByRef OutData, InData, inputEncoding, outputEncoding)
{
encoding := determineEncodingFlag(inputEncoding, "encrypt")
InDataLen := StrPutVar(InData, InData, "UTF-8") - 1
DllCall( "Crypt32.dll\CryptBinaryToStringW", UInt,&InData, UInt,InDataLen, UInt,encoding, UInt,0, UIntP,TChars, "CDECL Int" )
VarSetCapacity( OutData, Req := TChars * ( A_IsUnicode ? 2 : 1 ), 0 )
DllCall( "Crypt32.dll\CryptBinaryToStringW", UInt,&InData, UInt,InDataLen, UInt,encoding, Str,OutData, UIntP,Req, "CDECL Int" )
Return TChars
}
determineEncodingFlag(encoding, crypt)
{
if(crypt = "encrypt")
{
if(encoding = "Binary")
return 0x00000002
else if(encoding = "BASE64")
return 0x40000001
else if(encoding = "Hexadecimal")
return 0x00000004
}
else if (crypt = "decrypt")
{
if(encoding = "Binary")
return 0x00000002
else if(encoding = "BASE64")
return 0x00000001
else if(encoding = "Hexadecimal")
return 0x00000008
}
}
StrPutVar(string, ByRef var, encoding)
{
; Ensure capacity.
VarSetCapacity( var, StrPut(string, encoding)
; StrPut returns char count, but VarSetCapacity needs bytes.
* ((encoding="utf-16"||encoding="cp1200") ? 2 : 1) )
; Copy or convert the string.
return StrPut(string, &var, encoding)
}
decodeUTF8( ByRef OutData, InData, inputEncoding)
{
encoding := determineEncodingFlag(inputEncoding, "decrypt")
DllCall( "Crypt32.dll\CryptStringToBinaryW", UInt,&InData, UInt,StrLen(InData), UInt,encoding, UInt,0, UIntP,Bytes, Int,0, Int,0, "CDECL Int" )
VarSetCapacity( OutData, Req := Bytes * ( A_IsUnicode ? 2 : 1 ), 0 )
DllCall( "Crypt32.dll\CryptStringToBinaryW", UInt,&InData, UInt,StrLen(InData), UInt,encoding, Str,OutData, UIntP,Req, Int,0, Int,0, "CDECL Int" )
OutData := StrGet(&OutData, "cp0")
Return Bytes
}
TxtToBin(txt)
{ ; http://www.autohotkey.com/board/topic/7835-ascii-binary-converter/?p=48740
Loop Parse, txt
{
Loop 8
{
bin := bin (Asc(A_LoopField) >> (8 - A_Index) & 1)
}
bin .= " "
}
return SubStr(bin, 1, (StrLen(bin) - 1))
}
BinToTxt(bin)
{ ; http://www.autohotkey.com/board/topic/7835-ascii-binary-converter/?p=48740
StringReplace, bin, bin, %A_Space%,,All
Loop Parse, bin
{
x += x + (A_LoopField = "1")
If !Mod(A_Index,8)
{
txt := txt Chr(x)
x = 0
}
}
Return txt
}
Rot13(string)
{ ; from LinearSpoon's Translation of The Worlds Shortest C Implementation of Rot13 http://rosettacode.org/wiki/Rot-13#AutoHotkey
Output := ""
Loop, Parse, string
{
a := ~Asc(A_LoopField)
Output .= Chr(~a-1//(~(a|32)//13*2-11)*13)
}
return Output
}
ascii2Decimal(string)
{
encoding := ""
Loop, Parse, string
{
encoding .= Asc(A_LoopField) . " "
}
return SubStr(encoding, 1, StrLen(encoding) - 1)
}
decimal2Ascii(string)
{
decoding := ""
Loop, Parse, string, %A_Space%
{
decoding .= Chr(A_LoopField)
}
return decoding
}
uriEncode(str)
{ ; v 0.3 / (w) 24.06.2008 by derRaphael / zLib-Style release http://www.autohotkey.com/board/topic/6199-url-encoding/?p=193258
b_Format := A_FormatInteger
data := ""
SetFormat,Integer,H
Loop,Parse,str
if ((Asc(A_LoopField)>0x7f) || (Asc(A_LoopField)<0x30) || (asc(A_LoopField)=0x3d))
data .= "%" . ((StrLen(c:=SubStr(ASC(A_LoopField),3))<2) ? "0" . c : c)
Else
data .= A_LoopField
SetFormat,Integer,%b_format%
return data
}
uriDecode(str)
{ ; v 0.1 / (w) 28.06.2008 by derRaphael / zLib-Style release http://www.autohotkey.com/board/topic/6199-url-encoding/?p=193258
Loop,Parse,str,`%
txt := (A_Index=1) ? A_LoopField : txt chr("0x" substr(A_LoopField,1,2)) SubStr(A_LoopField,3)
return txt
}
ConvertBase(InputBase, OutputBase, nptr)
{ ; came from somewhere very similar to http://www.autohotkey.com/board/topic/15951-base-10-to-base-36-conversion/?p=172786
static u := A_IsUnicode ? "_wcstoui64" : "_strtoui64"
static v := A_IsUnicode ? "_i64tow" : "_i64toa"
VarSetCapacity(s, 66, 0)
value := DllCall("msvcrt.dll\" u, "Str", nptr, "UInt", 0, "UInt", InputBase, "CDECL Int64")
DllCall("msvcrt.dll\" v, "Int64", value, "Str", s, "UInt", OutputBase, "CDECL")
return s
}
; Uses the ConvertBase function to convert formated numbers similar to the http://www.asciitohex.com/ site
Convert(inputBase, outputBase, inputNumber)
{
; Binary not created correctly if hex isn't inputed in 2 digit format.
if(inputBase = 16 && outputBase = 2)
inputNumber := standardizeHexInputFormatForBinaryOutput(inputNumber)
output := ""
Loop, Parse, inputNumber, %A_Space%
{
; convertBase ouput 0 for 16 base 0 when I need 00
temp := ConvertBase(inputBase, outputBase, A_LoopField)
if(temp = 0)
{
if(outputBase = 2)
temp := "00000000"
else if(outputBase = 16)
temp := "00"
}
output .= temp . " "
}
StringUpper, output, output
return SubStr(output, 1, (StrLen(output) - 1))
}
standardizeHexInputFormatForBinaryOutput(inputHex)
{
hex := ""
StringReplace, inputHex, inputHex, %A_Space%,,All
Loop, Parse, inputHex
{
if(A_Index != 1 && Mod(A_Index - 1, 2) = 0)
{
hex .= " " . A_LoopField
}
else
{
hex .= A_LoopField
}
}
return hex
}
convertInputToOutputEncoding(inputEncoding, string, outputEncoding)
{
if(inputEncoding = outputEncoding)
return string
; if the conversion is a base to base, i.e. 10(dec) to 16(hex) use the convert function
inputEncodingBase := determineEncodingBase(inputEncoding)
outputEncodingBase := determineEncodingBase(outputEncoding)
if(inputEncodingBase != 0 && outputEncodingBase != 0)
{
return Convert(inputEncodingBase, outputEncodingBase, string)
}
; convert any base64 to text
if(inputEncoding = "BASE64")
string := convertInputToText(string, inputEncoding)
; Non-base to base conversions
if(outputEncoding = "BASE64" && inputEncoding = "Text")
encodeUTF8(encoded, string, "BASE64", outputEncoding)
else if(outputEncoding = "BASE64")
encoded := ToBase64(string)
else if(outputEncoding = "Binary" && inputEncoding = "Text")
encoded := TxtToBin(string)
else if(outputEncoding = "Binary")
encodeUTF8(encoded, string, "Binary", outputEncoding)
else if(outputEncoding = "Decimal")
return ascii2Decimal(string)
else if(outputEncoding = "Hexadecimal")
encodeUTF8(encoded, string, "Hexadecimal", outputEncoding)
else if(outputEncoding = "ROT13")
return Rot13(string)
else if(outputEncoding = "URI")
return uriEncode(string)
else if(outputEncoding = "Text" && inputEncoding != "BASE64")
return convertInputToText(string, inputEncoding)
return encoded
}
determineEncodingBase(encoding)
{
if(encoding = "Binary")
return 2
else if(encoding = "Decimal")
return 10
else if(encoding = "Hexadecimal")
return 16
else
return 0
}
ToBase64(string)
{
static CharSet := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
; convert input to binary
binary := ""
Loop, Parse, string
{
; if the entire string is a number treat don't get the Ascii value of the numbers skip that step
; Pad output with zeros to each section has 8.
if string is not integer
binary .= SubStr("0000000" . ConvertBase(10, 2, Asc(A_LoopField)), -7, 8)
else
binary .= SubStr("0000000" . ConvertBase(10, 2, A_LoopField), -7, 8)
}
; If number of bytes(group of eight) isn't divisible by three bytes(24) add extra zeros until you have it.
temp := Mod(StrLen(binary), 24)
shortSection := (24 - temp)
binary := binary . SubStr("000000000000000000000000", 1, shortSection)
; if the last 24,18,12,6 are zero remove them
if(SubStr(binary, -23) = "000000000000000000000000")
binary := SubStr(binary, 1, StrLen(binary) - 24)
else if(SubStr(binary, -17) = "000000000000000000")
binary := SubStr(binary, 1, StrLen(binary) - 18)
else if(SubStr(binary, -11) = "000000000000")
binary := SubStr(binary, 1, StrLen(binary) - 12)
else if(SubStr(binary, -5) = "000000")
binary := SubStr(binary, 1, StrLen(binary) - 6)
; split binary into segements of six
binary := Trim(RegExReplace(binary, "(.{6})", "$1 "))
; convert segments to decimal
base64 := ""
Loop, Parse, binary, %A_Space%
{
base64 .= SubStr(CharSet, ConvertBase(2, 10, A_LoopField) + 1, 1)
}
; If not divisible by 4 add one or two equal signs
if(Mod(StrLen(base64), 4) > 0)
base64 .= SubStr("==", 1, (4 - Mod(StrLen(base64), 4)))
return base64
}
convertInputToText(string, inputEncoding)
{
if(inputEncoding = "BASE64")
decodeUTF8(decoded, string, "Base64")
else if(inputEncoding = "Binary")
decoded := BinToTxt(string)
else if(inputEncoding = "Decimal")
return decimal2Ascii(string)
else if(inputEncoding = "Hexadecimal")
decodeUTF8(decoded, string, "Hexadecimal")
else if(inputEncoding = "ROT13")
return Rot13(string)
else if(inputEncoding = "URI")
return uriDecode(string)
else
return string
return decoded
}
Gui, Add, Text, x12 y10 w30 h20 , Input:
Gui, Add, DropDownList, x52 y10 w310 h20 vinputEncoding Choose1 R9, Text|BASE64|Binary|Decimal|Hexadecimal|ROT13|URI Encoded
Gui, Add, Edit, x12 y40 w360 h60 vconverterInput,
;~ Gui, Add, CheckBox, x402 y10 w90 h30 hwndsmartConvertHwnd vsmartConvert, Smart Encode?
Gui, Add, Button, x392 y50 w150 h40 vencode gencode, Encode
Gui, Add, Text, x12 y120 w110 h20 , Text (ASCII / ANSI)
Gui, Add, Edit, x12 y150 w170 h140 vtextOutput ,
Gui, Add, Button, x12 y300 w80 h30 vcopyToClipboardText gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x102 y300 w80 h30 vcopyToInputText gcopyToInput, Copy to input
Gui, Add, Text, x202 y120 w110 h20 , Binary
Gui, Add, Edit, x192 y150 w170 h140 vbinaryOutput ,
Gui, Add, Button, x192 y300 w80 h30 vcopyToClipboardBinary gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x282 y300 w80 h30 vcopyToInputBinary gcopyToInput, Copy to input
Gui, Add, Text, x382 y120 w110 h20 , Decimal
Gui, Add, Edit, x372 y150 w170 h140 vdecimalOutput,
Gui, Add, Button, x372 y300 w80 h30 vcopyToClipboardDecimal gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x462 y300 w80 h30 vcopyToInputDecimal gcopyToInput, Copy to input
Gui, Add, Text, x12 y350 w110 h20 , BASE64
Gui, Add, Edit, x12 y380 w170 h140 vbase64Output,
Gui, Add, Button, x12 y530 w80 h30 vcopyToClipboardBase64 gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x102 y530 w80 h30 vcopyToInputBase64 gcopyToInput, Copy to input
Gui, Add, Text, x202 y350 w110 h20 , ROT13
Gui, Add, Edit, x192 y380 w170 h140 vrot13Output,
Gui, Add, Button, x192 y530 w80 h30 vcopyToClipboardRot13 gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x282 y530 w80 h30 vcopyToInputRot13 gcopyToInput, Copy to input
Gui, Add, Text, x372 y350 w110 h20 , URI Encoded
Gui, Add, Edit, x372 y380 w170 h140 vuriOutput,
Gui, Add, Button, x372 y530 w80 h30 vcopyToClipboardUri gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x462 y530 w80 h30 vcopyToInputUri gcopyToInput, Copy to input
Gui, Add, Text, x562 y120 w110 h20 , Hexadecimal
Gui, Add, Edit, x562 y150 w170 h140 vhexadecimalOutput,
Gui, Add, Button, x562 y300 w80 h30 vcopyToClipboardHexadecimal gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x652 y300 w80 h30 vcopyToInputHexadecimal gcopyToInput, Copy to input
Gui, Add, Text, x562 y530 w170 h20 , Made for request on donationcoder
; Generated using SmartGUI Creator 4.0
Gui, Show, xCenter yCenter h566 w746, Encoder
OnMessage(0x200, "Help")
Return
GuiClose:
ExitApp
encode:
Gui, Submit, nohide
GuiControlGet, inputEncoding,, inputEncoding
GuiControlGet, converterInput,, converterInput
;~ GuiControlGet, smartConvertEnabled,, smartConvert
inputList := "Text|BASE64|Binary|Decimal|Hexadecimal|ROT13|URI"
Loop, Parse, inputList, |
{
; clear the output edit field first
Guicontrol,, % A_LoopField . "Output"
Guicontrol,, % A_LoopField . "Output", % convertInputToOutputEncoding(inputEncoding, converterInput, A_LoopField)
}
return
copyToClipboard:
; Use the name of variable name of the button to get the text from the correct edit box
; Each button is named 'copyToClipboardXXXXXX' and each edit is named 'XXXOutput'
GuiControlGet, ClipBoard,, % SubStr(A_GuiControl, 16) . "Output"
return
copyToInput:
; use A_GuiControl to figure out the new input encoding
newInputEncoding := SubStr(A_GuiControl, 12)
; Populate the input encoding
GuiControl, ChooseString, inputEncoding, %newInputEncoding%
; populate input with selected output text found via A_GuiControl
GuiControlGet, output,, % newInputEncoding . "Output"
Guicontrol,, converterInput, %output%
return
lifeweaver:
Look like everything wasn't quite right yet.
Spoiler
--- ---#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance ignore
Help(wParam, lParam, Msg)
{
MouseGetPos,,,, OutputVarControl
;~ IfEqual, OutputVarControl, Button1
;~ Help := "Will try to convert the input multiple times if detected as Hex/Binary."
ToolTip % Help
}
encodeUTF8( ByRef OutData, InData, inputEncoding, outputEncoding)
{
encoding := determineEncodingFlag(inputEncoding, "encrypt")
InDataLen := StrPutVar(InData, InData, "UTF-8") - 1
DllCall( "Crypt32.dll\CryptBinaryToStringW", UInt,&InData, UInt,InDataLen, UInt,encoding, UInt,0, UIntP,TChars, "CDECL Int" )
VarSetCapacity( OutData, Req := TChars * ( A_IsUnicode ? 2 : 1 ), 0 )
DllCall( "Crypt32.dll\CryptBinaryToStringW", UInt,&InData, UInt,InDataLen, UInt,encoding, Str,OutData, UIntP,Req, "CDECL Int" )
Return TChars
}
determineEncodingFlag(encoding, crypt)
{
if(crypt = "encrypt")
{
if(encoding = "Binary")
return 0x00000002
else if(encoding = "BASE64")
return 0x40000001
else if(encoding = "Hexadecimal")
return 0x00000004
}
else if (crypt = "decrypt")
{
if(encoding = "Binary")
return 0x00000002
else if(encoding = "BASE64")
return 0x00000001
else if(encoding = "Hexadecimal")
return 0x00000008
}
}
StrPutVar(string, ByRef var, encoding)
{
; Ensure capacity.
VarSetCapacity( var, StrPut(string, encoding)
; StrPut returns char count, but VarSetCapacity needs bytes.
* ((encoding="utf-16"||encoding="cp1200") ? 2 : 1) )
; Copy or convert the string.
return StrPut(string, &var, encoding)
}
decodeUTF8( ByRef OutData, InData, inputEncoding)
{
encoding := determineEncodingFlag(inputEncoding, "decrypt")
DllCall( "Crypt32.dll\CryptStringToBinaryW", UInt,&InData, UInt,StrLen(InData), UInt,encoding, UInt,0, UIntP,Bytes, Int,0, Int,0, "CDECL Int" )
VarSetCapacity( OutData, Req := Bytes * ( A_IsUnicode ? 2 : 1 ), 0 )
DllCall( "Crypt32.dll\CryptStringToBinaryW", UInt,&InData, UInt,StrLen(InData), UInt,encoding, Str,OutData, UIntP,Req, Int,0, Int,0, "CDECL Int" )
OutData := StrGet(&OutData, "cp0")
Return Bytes
}
TxtToBin(txt)
{ ; http://www.autohotkey.com/board/topic/7835-ascii-binary-converter/?p=48740
Loop Parse, txt
{
Loop 8
{
bin := bin (Asc(A_LoopField) >> (8 - A_Index) & 1)
}
bin .= " "
}
return SubStr(bin, 1, (StrLen(bin) - 1))
}
BinToTxt(bin)
{ ; http://www.autohotkey.com/board/topic/7835-ascii-binary-converter/?p=48740
StringReplace, bin, bin, %A_Space%,,All
Loop Parse, bin
{
x += x + (A_LoopField = "1")
If !Mod(A_Index,8)
{
txt := txt Chr(x)
x = 0
}
}
Return txt
}
Rot13(string)
{ ; from LinearSpoon's Translation of The Worlds Shortest C Implementation of Rot13 http://rosettacode.org/wiki/Rot-13#AutoHotkey
Output := ""
Loop, Parse, string
{
a := ~Asc(A_LoopField)
Output .= Chr(~a-1//(~(a|32)//13*2-11)*13)
}
return Output
}
ascii2Decimal(string)
{
encoding := ""
Loop, Parse, string
{
encoding .= Asc(A_LoopField) . " "
}
return SubStr(encoding, 1, StrLen(encoding) - 1)
}
decimal2Ascii(string)
{
decoding := ""
Loop, Parse, string, %A_Space%
{
decoding .= Chr(A_LoopField)
}
return decoding
}
uriEncode(str)
{ ; v 0.3 / (w) 24.06.2008 by derRaphael / zLib-Style release http://www.autohotkey.com/board/topic/6199-url-encoding/?p=193258
b_Format := A_FormatInteger
data := ""
SetFormat,Integer,H
Loop,Parse,str
if ((Asc(A_LoopField)>0x7f) || (Asc(A_LoopField)<0x30) || (asc(A_LoopField)=0x3d))
data .= "%" . ((StrLen(c:=SubStr(ASC(A_LoopField),3))<2) ? "0" . c : c)
Else
data .= A_LoopField
SetFormat,Integer,%b_format%
return data
}
uriDecode(str)
{ ; v 0.1 / (w) 28.06.2008 by derRaphael / zLib-Style release http://www.autohotkey.com/board/topic/6199-url-encoding/?p=193258
Loop,Parse,str,`%
txt := (A_Index=1) ? A_LoopField : txt chr("0x" substr(A_LoopField,1,2)) SubStr(A_LoopField,3)
return txt
}
ConvertBase(InputBase, OutputBase, nptr)
{ ; came from somewhere very similar to http://www.autohotkey.com/board/topic/15951-base-10-to-base-36-conversion/?p=172786
static u := A_IsUnicode ? "_wcstoui64" : "_strtoui64"
static v := A_IsUnicode ? "_i64tow" : "_i64toa"
VarSetCapacity(s, 66, 0)
value := DllCall("msvcrt.dll\" u, "Str", nptr, "UInt", 0, "UInt", InputBase, "CDECL Int64")
DllCall("msvcrt.dll\" v, "Int64", value, "Str", s, "UInt", OutputBase, "CDECL")
return s
}
; Uses the ConvertBase function to convert formated numbers similar to the http://www.asciitohex.com/ site
Convert(inputBase, outputBase, inputNumber)
{
; Binary not created correctly if hex isn't inputed in 2 digit format.
if(inputBase = 16 && outputBase = 2)
inputNumber := standardizeHexInputFormatForBinaryOutput(inputNumber)
output := ""
Loop, Parse, inputNumber, %A_Space%
{
; convertBase ouput 0 for 16 base 0 when I need 00
temp := ConvertBase(inputBase, outputBase, A_LoopField)
if(temp = 0)
{
if(outputBase = 2)
temp := "00000000"
else if(outputBase = 16)
temp := "00"
}
output .= temp . " "
}
StringUpper, output, output
return SubStr(output, 1, (StrLen(output) - 1))
}
standardizeHexInputFormatForBinaryOutput(inputHex)
{
hex := ""
StringReplace, inputHex, inputHex, %A_Space%,,All
Loop, Parse, inputHex
{
if(A_Index != 1 && Mod(A_Index - 1, 2) = 0)
{
hex .= " " . A_LoopField
}
else
{
hex .= A_LoopField
}
}
return hex
}
convertInputToOutputEncoding(inputEncoding, string, outputEncoding)
{
if(inputEncoding = outputEncoding)
return string
; if the conversion is a base to base, i.e. 10(dec) to 16(hex) use the convert function
inputEncodingBase := determineEncodingBase(inputEncoding)
outputEncodingBase := determineEncodingBase(outputEncoding)
if(inputEncodingBase != 0 && outputEncodingBase != 0)
{
return Convert(inputEncodingBase, outputEncodingBase, string)
}
; convert any base64 to text
if(inputEncoding = "BASE64")
string := convertInputToText(string, inputEncoding)
; Non-base to base conversions
if(outputEncoding = "BASE64" && inputEncoding = "Text")
encodeUTF8(encoded, string, "BASE64", outputEncoding)
else if(outputEncoding = "BASE64")
encoded := ToBase64(string)
else if(outputEncoding = "Binary" && (inputEncoding = "Text" || inputEncoding = "BASE64"))
encoded := TxtToBin(string)
else if(outputEncoding = "Binary")
encodeUTF8(encoded, string, "Binary", outputEncoding)
else if(outputEncoding = "Decimal")
return ascii2Decimal(string)
else if(outputEncoding = "Hexadecimal")
encodeUTF8(encoded, string, "Hexadecimal", outputEncoding)
else if(outputEncoding = "ROT13")
return Rot13(string)
else if(outputEncoding = "URI")
return uriEncode(string)
else if(outputEncoding = "Text" && inputEncoding != "BASE64")
return convertInputToText(string, inputEncoding)
else if(outputEncoding = "Text" && inputEncoding = "BASE64")
return string
return encoded
}
determineEncodingBase(encoding)
{
if(encoding = "Binary")
return 2
else if(encoding = "Decimal")
return 10
else if(encoding = "Hexadecimal")
return 16
else
return 0
}
ToBase64(string)
{
static CharSet := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
; convert input to binary unless input is already binary
if((RegExMatch(string, "^(\d{8}\s?)*$")))
{
StringReplace, string, string, %A_Space%,,All
binary := string
}
else
{
binary := ""
Loop, Parse, string
{
; if the entire string is a number treat don't get the Ascii value of the numbers skip that step
; Pad output with zeros to each section has 8.
if string is not integer
binary .= SubStr("0000000" . ConvertBase(10, 2, Asc(A_LoopField)), -7, 8)
else
binary .= SubStr("0000000" . ConvertBase(10, 2, A_LoopField), -7, 8)
}
}
; If number of bytes(group of eight) isn't divisible by three bytes(24) add extra zeros until you have it.
temp := Mod(StrLen(binary), 24)
shortSection := (24 - temp)
binary := binary . SubStr("000000000000000000000000", 1, shortSection)
; if the last 24,18,12,6 are zero remove them
if(SubStr(binary, -23) = "000000000000000000000000")
binary := SubStr(binary, 1, StrLen(binary) - 24)
else if(SubStr(binary, -17) = "000000000000000000")
binary := SubStr(binary, 1, StrLen(binary) - 18)
else if(SubStr(binary, -11) = "000000000000")
binary := SubStr(binary, 1, StrLen(binary) - 12)
else if(SubStr(binary, -5) = "000000")
binary := SubStr(binary, 1, StrLen(binary) - 6)
; split binary into segements of six
binary := Trim(RegExReplace(binary, "(.{6})", "$1 "))
; convert segments to decimal
base64 := ""
Loop, Parse, binary, %A_Space%
{
base64 .= SubStr(CharSet, ConvertBase(2, 10, A_LoopField) + 1, 1)
}
; If not divisible by 4 add one or two equal signs
if(Mod(StrLen(base64), 4) > 0)
{
; case where input was binary
if(Mod(StrLen(base64), 4) < 2)
base64 .= "A"
base64 .= SubStr("==", 1, (4 - Mod(StrLen(base64), 4)))
}
return base64
}
Base64Decode(Code)
{ ;http://www.autohotkey.com/board/topic/5545-base64-coderdecoder/?p=690930
static CharSet := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Length := StrLen(Code)
;remove padding if present
If SubStr(Code,0) = "="
{
If SubStr(Code,-1,1) = "="
Length -= 2
Else
Length --
}
BufferSize := Ceil((Length / 4) * 3), VarSetCapacity(Data,BufferSize) ;calculate the correct buffer size
Index := 1, BinPos := 0
Loop, % Length >> 2 ;process 4 characters per iteration
{
;decode the characters and store them in the output buffer
Value := ((InStr(CharSet,SubStr(Code,Index,1),1) - 1) << 18)
| ((InStr(CharSet,SubStr(Code,Index + 1,1),1) - 1) << 12)
| ((InStr(CharSet,SubStr(Code,Index + 2,1),1) - 1) << 6)
| (InStr(CharSet,SubStr(Code,Index + 3,1),1) - 1)
Index += 4
Data .= Chr(Value >> 16) . Chr((Value >> 8) & 255) . Chr(Value & 255)
}
Length &= 3 ;determine the number of characters that remain
If Length > 0 ;characters remain
{
;decode the first of the remaining characters and store it in the output buffer
Value := ((InStr(CharSet,SubStr(Code,Index,1),1) - 1) << 18)
| ((InStr(CharSet,SubStr(Code,Index + 1,1),1) - 1) << 12)
Data .= Chr(Value >> 16)
;another character remains
If Length = 3
{
;decode the character and store it in the output buffer
Value |= (InStr(CharSet,SubStr(Code,Index + 2,1),1) - 1) << 6
Data .= Chr((Value >> 8) & 255)
}
}
Return, Data
}
convertInputToText(string, inputEncoding)
{
if(inputEncoding = "BASE64")
decoded := Base64Decode(string)
else if(inputEncoding = "Binary")
decoded := BinToTxt(string)
else if(inputEncoding = "Decimal")
return decimal2Ascii(string)
else if(inputEncoding = "Hexadecimal")
decodeUTF8(decoded, string, "Hexadecimal")
else if(inputEncoding = "ROT13")
return Rot13(string)
else if(inputEncoding = "URI")
return uriDecode(string)
else
return string
return decoded
}
Gui, Add, Text, x12 y10 w30 h20 , Input:
Gui, Add, DropDownList, x52 y10 w310 h20 vinputEncoding Choose1 R9, Text|BASE64|Binary|Decimal|Hexadecimal|ROT13|URI Encoded
Gui, Add, Edit, x12 y40 w360 h60 vconverterInput,
;~ Gui, Add, CheckBox, x402 y10 w90 h30 hwndsmartConvertHwnd vsmartConvert, Smart Encode?
Gui, Add, Button, x392 y50 w150 h40 vencode gencode, Encode
Gui, Add, Text, x12 y120 w110 h20 , Text (ASCII / ANSI)
Gui, Add, Edit, x12 y150 w170 h140 vtextOutput ,
Gui, Add, Button, x12 y300 w80 h30 vcopyToClipboardText gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x102 y300 w80 h30 vcopyToInputText gcopyToInput, Copy to input
Gui, Add, Text, x202 y120 w110 h20 , Binary
Gui, Add, Edit, x192 y150 w170 h140 vbinaryOutput ,
Gui, Add, Button, x192 y300 w80 h30 vcopyToClipboardBinary gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x282 y300 w80 h30 vcopyToInputBinary gcopyToInput, Copy to input
Gui, Add, Text, x382 y120 w110 h20 , Decimal
Gui, Add, Edit, x372 y150 w170 h140 vdecimalOutput,
Gui, Add, Button, x372 y300 w80 h30 vcopyToClipboardDecimal gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x462 y300 w80 h30 vcopyToInputDecimal gcopyToInput, Copy to input
Gui, Add, Text, x12 y350 w110 h20 , BASE64
Gui, Add, Edit, x12 y380 w170 h140 vbase64Output,
Gui, Add, Button, x12 y530 w80 h30 vcopyToClipboardBase64 gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x102 y530 w80 h30 vcopyToInputBase64 gcopyToInput, Copy to input
Gui, Add, Text, x202 y350 w110 h20 , ROT13
Gui, Add, Edit, x192 y380 w170 h140 vrot13Output,
Gui, Add, Button, x192 y530 w80 h30 vcopyToClipboardRot13 gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x282 y530 w80 h30 vcopyToInputRot13 gcopyToInput, Copy to input
Gui, Add, Text, x372 y350 w110 h20 , URI Encoded
Gui, Add, Edit, x372 y380 w170 h140 vuriOutput,
Gui, Add, Button, x372 y530 w80 h30 vcopyToClipboardUri gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x462 y530 w80 h30 vcopyToInputUri gcopyToInput, Copy to input
Gui, Add, Text, x562 y120 w110 h20 , Hexadecimal
Gui, Add, Edit, x562 y150 w170 h140 vhexadecimalOutput,
Gui, Add, Button, x562 y300 w80 h30 vcopyToClipboardHexadecimal gcopyToClipboard, Copy to Clipboard
Gui, Add, Button, x652 y300 w80 h30 vcopyToInputHexadecimal gcopyToInput, Copy to input
Gui, Add, Text, x562 y530 w170 h20 , Made for request on donationcoder
; Generated using SmartGUI Creator 4.0
Gui, Show, xCenter yCenter h566 w746, Encoder
OnMessage(0x200, "Help")
Return
GuiClose:
ExitApp
encode:
Gui, Submit, nohide
GuiControlGet, inputEncoding,, inputEncoding
GuiControlGet, converterInput,, converterInput
;~ GuiControlGet, smartConvertEnabled,, smartConvert
inputList := "Text|BASE64|Binary|Decimal|Hexadecimal|ROT13|URI"
Loop, Parse, inputList, |
{
; clear the output edit field first
Guicontrol,, % A_LoopField . "Output"
Guicontrol,, % A_LoopField . "Output", % convertInputToOutputEncoding(inputEncoding, converterInput, A_LoopField)
}
return
copyToClipboard:
; Use the name of variable name of the button to get the text from the correct edit box
; Each button is named 'copyToClipboardXXXXXX' and each edit is named 'XXXOutput'
GuiControlGet, ClipBoard,, % SubStr(A_GuiControl, 16) . "Output"
return
copyToInput:
; use A_GuiControl to figure out the new input encoding
newInputEncoding := SubStr(A_GuiControl, 12)
; Populate the input encoding
GuiControl, ChooseString, inputEncoding, %newInputEncoding%
; populate input with selected output text found via A_GuiControl
GuiControlGet, output,, % newInputEncoding . "Output"
Guicontrol,, converterInput, %output%
return
ashecorven:
Lifeweaver, thank you, it's fantastic. Everything seems to be working fantastically.
Really appreciated.
I'm not sure how this is done, but I think this should be added to the list of software available on the site!
Navigation
[0] Message Index
[*] Previous page
Go to full version