Hi. With this example I want to show how using the plugin MemoryEx you can compress and decompress binary data using LZ1(LZ77) algorithm. Thus you reduce the file size. After processing Base64 you can use the compressed data in your project to dynamically retrieve. For example, if you do not want to store some files in the clear.
Announcement
Collapse
No announcement yet.
Native API Compression
Collapse
X
-
New function Base64 decoding. Very fast.
Code:[font=Courier New][size=2]Crypto[color=#FF0000].[/color]Base64Decode [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (sData) [color=#0000FF][b]local[/b][/color] pcbBinary [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx([color=#FF6600]4[/color]); [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"Crypt32.dll"[/color][color=#FF0000],[/color] [color=#800080]"CryptStringToBinaryA"[/color][color=#FF0000],[/color] [color=#800080]"\""[/color][color=#FF0000].[/color][color=#FF0000].[/color]sData[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]"\", 0, 1, 0, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pcbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 0, 0"[/color][color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (sRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] pcbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] [color=#800080]""[/color][color=#FF0000],[/color] [color=#800080]'Error calculating the length of the buffer needed.'[/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] pbBinary [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx(pcbBinary[color=#FF0000]:[/color]Integer()); [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"Crypt32.dll"[/color][color=#FF0000],[/color] [color=#800080]"CryptStringToBinaryA"[/color][color=#FF0000],[/color] [color=#800080]"\""[/color][color=#FF0000].[/color][color=#FF0000].[/color]sData[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]"\", 0, 1, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]pcbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 0, 0"[/color][color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (sRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] pcbBinary[color=#FF0000]:[/color]Free(); pbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] [color=#800080]""[/color][color=#FF0000],[/color] [color=#800080]'Error decoding.'[/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] pbBinary[color=#FF0000]:[/color]LString(pbBinary[color=#FF0000]:[/color]Size()); pcbBinary[color=#FF0000]:[/color]Free(); pbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] sRet; [color=#0000FF][b]end[/b][/color][/size][/font]
-
Originally posted by jakabo View Postwould it be the same way to encode with Crypt32.dll ?
Code:[font=Courier New][size=2]Crypto[color=#FF0000].[/color]Base64Encode [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (sData) [color=#0000FF][b]local[/b][/color] cbBinary [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx(sData[color=#FF0000]:[/color]len()); cbBinary[color=#FF0000]:[/color]LString(cbBinary[color=#FF0000]:[/color]Size()); [color=#0000FF][b]local[/b][/color] pcchString [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx([color=#FF6600]4[/color]); [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"Crypt32.dll"[/color][color=#FF0000],[/color] [color=#800080]"CryptBinaryToStringA"[/color][color=#FF0000],[/color] cbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]cbBinary[color=#FF0000]:[/color]Size()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 1, 0, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pcchString[color=#FF0000]:[/color]GetPointer()[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (sRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] pcchString[color=#FF0000]:[/color]Free(); cbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] [color=#800080]""[/color][color=#FF0000],[/color] [color=#800080]'Error calculating the length of the buffer needed.'[/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] pszString [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx(pcchString[color=#FF0000]:[/color]Integer()); [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"Crypt32.dll"[/color][color=#FF0000],[/color] [color=#800080]"CryptBinaryToStringA"[/color][color=#FF0000],[/color] cbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]cbBinary[color=#FF0000]:[/color]Size()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 1, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pszString[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pcchString[color=#FF0000]:[/color]GetPointer()[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (sRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] pszString[color=#FF0000]:[/color]Free(); pcchString[color=#FF0000]:[/color]Free(); cbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] [color=#800080]""[/color][color=#FF0000],[/color] [color=#800080]'Error encoding'[/color]; [color=#0000FF][b]end[/b][/color] sRet[color=#FF0000]=[/color]MemoryEx[color=#FF0000].[/color]LString(pszString[color=#FF0000]:[/color]GetPointer()[color=#FF0000],[/color] pszString[color=#FF0000]:[/color]Size()); pszString[color=#FF0000]:[/color]Free(); pcchString[color=#FF0000]:[/color]Free(); cbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] sRet; [color=#0000FF][b]end[/b][/color][/size][/font]
Comment
-
Issue resolved. Missed one argument to the function.Is highlighted in red. Working version:
Code:[font=Courier New][size=2]Crypto[color=#FF0000].[/color]Base64Encode [color=#FF0000]=[/color] [color=#0000FF][b]function[/b][/color] (sData) [color=#0000FF][b]local[/b][/color] cbBinary [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx(sData[color=#FF0000]:[/color]len()); cbBinary[color=#FF0000]:[/color]LString(cbBinary[color=#FF0000]:[/color]Size()[color=#FF0000],[/color] sData); [color=#0000FF][b]local[/b][/color] pcchString [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx([color=#FF6600]4[/color]); [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"Crypt32.dll"[/color][color=#FF0000],[/color] [color=#800080]"CryptBinaryToStringA"[/color][color=#FF0000],[/color] cbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]cbBinary[color=#FF0000]:[/color]Size()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 1, 0, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pcchString[color=#FF0000]:[/color]GetPointer()[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (sRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] pcchString[color=#FF0000]:[/color]Free(); cbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] [color=#800080]""[/color][color=#FF0000],[/color] [color=#800080]'Error calculating the length of the buffer needed.'[/color]; [color=#0000FF][b]end[/b][/color] [color=#0000FF][b]local[/b][/color] pszString [color=#FF0000]=[/color] MemoryEx[color=#FF0000].[/color]AllocateEx(pcchString[color=#FF0000]:[/color]Integer()); [color=#0000FF][b]local[/b][/color] sRet [color=#FF0000]=[/color] DLL[color=#FF0000].[/color]CallFunction([color=#800080]"Crypt32.dll"[/color][color=#FF0000],[/color] [color=#800080]"CryptBinaryToStringA"[/color][color=#FF0000],[/color] cbBinary[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]","[/color][color=#FF0000].[/color][color=#FF0000].[/color]cbBinary[color=#FF0000]:[/color]Size()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", 1, "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pszString[color=#FF0000]:[/color]GetPointer()[color=#FF0000].[/color][color=#FF0000].[/color][color=#800080]", "[/color][color=#FF0000].[/color][color=#FF0000].[/color]pcchString[color=#FF0000]:[/color]GetPointer()[color=#FF0000],[/color] DLL_RETURN_TYPE_INTEGER[color=#FF0000],[/color] DLL_CALL_STDCALL); [color=#0000FF][b]if[/b][/color] (sRet [color=#FF0000]=[/color][color=#FF0000]=[/color] [color=#800080]'0'[/color]) [color=#0000FF][b]then[/b][/color] pszString[color=#FF0000]:[/color]Free(); pcchString[color=#FF0000]:[/color]Free(); cbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] [color=#800080]""[/color][color=#FF0000],[/color] [color=#800080]'Error encoding.'[/color]; [color=#0000FF][b]end[/b][/color] sRet [color=#FF0000]=[/color] pszString[color=#FF0000]:[/color]LString(pszString[color=#FF0000]:[/color]Size()); pszString[color=#FF0000]:[/color]Free(); pcchString[color=#FF0000]:[/color]Free(); cbBinary[color=#FF0000]:[/color]Free(); [color=#0000FF][b]return[/b][/color] sRet; [color=#0000FF][b]end[/b][/color][/size][/font]
Comment
-
why not making an action plugin with this ? if it is possible...
@kingzooly
In this case, the BASE64 only need to ensure that you can insert a compressed binary data in your project as a script. Nothing more ..
Comment
-
Originally posted by slota View PostIt is possible. But is it necessary?
@kingzooly
In this case, the BASE64 only need to ensure that you can insert a compressed binary data in your project as a script. Nothing more ..
Comment
Comment