找回密码
 加入
搜索
查看: 2679|回复: 3

[效率算法] ACN_HASH.au3丢失字符串的长度!

[复制链接]
发表于 2011-9-7 20:45:34 | 显示全部楼层 |阅读模式
本帖最后由 gzh888666 于 2011-9-7 20:56 编辑

重温专用链转换时使用了论坛的自定义函数
#Include <ACN_HASH.au3>
_Base64Encode($Data[, $LineBreak = 76])

发现一个问题,有时会无缘无故丢失字符串的长度,版本:AUTOIT_3.3.7.2-1PRE
#include <ACN_HASH.au3>

$Encrypt = _Base64Encode("http://baidu.com/【每日更新.com】_081611-780-carib-www/1.wmv")
MsgBox(0, '', $Encrypt)

$Decrypt = _Base64Decode($Encrypt)
MsgBox(0, '', $Decrypt)

MsgBox(0, '', BinaryToString($Decrypt))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-9-7 22:01:36 | 显示全部楼层
$str="http://baidu.com/【每日更新.com】_081611-780-carib-www/1.wmv"

$Encrypt = _Base64Encode($str)
MsgBox(0, '', $Encrypt)

$Decrypt = _Base64Decode($Encrypt)
msgbox(0,0,BinaryToString($Decrypt))


;======================================================
;
; 函数名称:                _Base64Decode
; 详细信息:                Base64解码
; 返回值 :                
; 作者:                        Ward(Taiwan)
;
;======================================================
Func _Base64Decode($Data)
        Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"
        
        Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
        DllStructSetData($CodeBuffer, 1, $Opcode)

        Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
        Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
                                                                                                        "str", $Data, _
                                                                                                        "ptr", DllStructGetPtr($Ouput), _
                                                                                                        "int", 0, _
                                                                                                        "int", 0)

        Return BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0])
EndFunc
;======================================================
;
; 函数名称:                _Base64Encode
; 详细信息:                Base64编码
; 返回值 :                
; 作者:                        Ward(Taiwan)
;
;======================================================
Func _Base64Encode($Data, $LineBreak = 76)
        Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"

        Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
        DllStructSetData($CodeBuffer, 1, $Opcode)

        $Data = StringToBinary($Data)
        Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
        DllStructSetData($Input, 1, $Data)

        $LineBreak = Floor($LineBreak / 4) * 4
        Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3) 
        $OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4

        Local $Ouput = DllStructCreate("char[" & $OputputSize & "]")
        DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
                                                                                                        "ptr", DllStructGetPtr($Input), _
                                                                                                        "int", BinaryLen($Data), _
                                                                                                        "ptr", DllStructGetPtr($Ouput), _
                                                                                                        "uint", $LineBreak)
        Return DllStructGetData($Ouput, 1)
EndFunc
发表于 2011-9-7 22:46:06 | 显示全部楼层
回复 2# 3mile

三笑有没有兴趣整合常用的加解密方式,函数估计你那儿也有,我实在是懒得弄了,老出错
 楼主| 发表于 2011-9-9 13:08:58 | 显示全部楼层
我不知道是否要放入已解决,用这个版本的人还不少,就在这里提醒大家注意吧!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 09:18 , Processed in 0.079993 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表