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

[AU3基础] 【已解决】帮忙把VB代码转换为Au3

[复制链接]
发表于 2010-7-5 20:08:05 | 显示全部楼层 |阅读模式
本帖最后由 KLU3K 于 2010-7-6 12:38 编辑

下面的代码能转换成au3的么?
这段代码是网通用户名转换的代码。看不懂,能否帮忙转换一下?
Function EncodeUser(UserName As String) As String
    If CheckUserEncode.Value Then
                Dim outstr As String
                Dim DicStr As String
                DicStr = "9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST"
                Dim DicA() As String
                ReDim DicA(Len(DicStr) - 1)
                Dim ff As Long
                For ff = 0 To Len(DicStr) - 1
                        DicA(ff) = Mid(DicStr, ff + 1, 1)
                Next 
                Dim DicB(15) As Byte 
                DicB(0) = &H11
                DicB(1) = &H34
                DicB(2) = &HC9
                DicB(3) = &H23
                DicB(4) = &H75
                DicB(5) = &H18
                DicB(6) = &HD7
                DicB(7) = &HE2
                DicB(8) = &H12
                DicB(9) = &H35
                DicB(10) = &H29
                DicB(11) = &H2B
                DicB(12) = &HEC
                DicB(13) = &HB6
                DicB(14) = &H23
                DicB(15) = &H19 

                Dim inputstr As String
                        inputstr = UserName 
                Dim InputStrArray() As String
                ReDim InputStrArray(Len(inputstr) - 1) 
                Dim OutPutArray() As String
                ReDim OutPutArray(500) 
                For ff = 0 To Len(inputstr) - 1
                        InputStrArray(ff) = Mid(inputstr, ff + 1, 1)
                Next 
                Dim i As Long    i = 0
                Dim j As Long    j = 0 
                Dim num4 As Long: num4 = &H25
                Dim di As Long
                Dim var2 As Long
                Dim index As Long
                Dim var3 As Long: var3 = 0 
                For i = 0 To Len(inputstr) - 1
                        For j = 0 To Len(DicStr) - 1
                                If InputStrArray(i) = DicA(j) Then
                                        If i >= &H10 Then
                                                di = DicB(i Mod &H10)
                                        Else
                                                di = DicB(i)
                                        End If 
                                        var2 = num4 * 3 
                                    index = (((di Xor var2) Xor var3) + j) Mod &H3E 
                                        OutPutArray(i) = DicA(index)
                                        var2 = index
                                        num4 = num4 Xor (var2 + &H24D9)
                                End If
                        Next j 
                        If OutPutArray(i) = "" Then
                           OutPutArray(i) = InputStrArray(i)
                        End If
                        var3 = var3 + 5 
            Next i 
                Dim kk As Long 
                For kk = 0 To UBound(OutPutArray)
                        If OutPutArray(kk) <> "" Then
                                outstr = outstr + OutPutArray(kk)
                        End If
                Next
                        outstr = "1:" + outstr
                        EncodeUser = outstr
                Else
                        EncodeUser = UserName
        End If
End Function 
 楼主| 发表于 2010-7-5 21:15:38 | 显示全部楼层
帮忙转换的我给加分
发表于 2010-7-6 11:54:29 | 显示全部楼层
转好了。
MsgBox(0,"",EncodeUser("13213asdf12",True))
;函数计算号码 (参数 用户名, 参数 是否算号 算号为真 不算为假)
Func EncodeUser($UserName,$IsCreateCode=False)
        ;如果是要算号,则开始算号,否则返回用户名。
        Local $EncodeUser=""  ;定义结果字符串
    If $IsCreateCode=True Then
           ;定义变量   输出字符串    字典字符串
                Local $OutStr="",$DicStr="9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST"
                ;     输入字符串等于用户名   这几个是干什么的?    
                Local $InputStr=$UserName , $Num4=0x25,$var3 = 0 , $di , $var2 , $index 
                ;     字典数组                      输入字符数组                         输出字符数组      字典数组2
                Local $DicArray[StringLen($DicStr)],$InputStrArray[StringLen($InputStr)],$OutPutArray[500],$DicB[16] 
                ;字典数组2赋值。
                $DicB[0] = 0X11
                $DicB[1] = 0X34
                $DicB[2] = 0XC9
                $DicB[3] = 0X23
                $DicB[4] = 0X75
                $DicB[5] = 0X18
                $DicB[6] = 0XD7
                $DicB[7] = 0XE2
                $DicB[8] = 0X12
                $DicB[9] = 0X35
                $DicB[10] = 0X29
                $DicB[11] = 0X2B
                $DicB[12] = 0XEC
                $DicB[13] = 0XB6
                $DicB[14] = 0X23
        $DicB[15] = 0X19 
                ;将字典字符串按位拆分到字典数组中去。
                For $ff = 0 To StringLen($DicStr) - 1 Step 1
                        $DicArray[$ff] = StringMid($DicStr, $ff + 1, 1)
                Next 
                ;将输入字符串(用户名) 按位拆分到输入数组中去。
        For $ff=0 To StringLen($InputStr)-1 Step 1
                        $InputStrArray[$ff]=StringMid($InputStr,$ff+1,1)
                Next
                ;开始算号。具体算法我没有分析。
                For $i = 0 To StringLen($inputstr) - 1 Step 1
                    For $j = 0 To StringLen($DicStr) - 1 Step 1
                                If $InputStrArray[$i] = $DicArray[$j] Then
                                        If $i >= 0x10 Then
                                                $di = $DicB[Mod($i,0x10)]
                                        Else
                                                $di = $DicB[$i]
                                        EndIf 
                                    $var2 = $num4 * 3 
                                        $index = Mod((BitXOR(BitXOR($di,$var2),$var3) + $j),0x3E )
                                        $OutPutArray[$i] = $DicArray[$index]
                                        $var2 = $index
                                        $num4 = BitXOR($num4,($var2+0x24D9))
                                EndIf
                        Next
                    If $OutPutArray[$i] = "" Then
                                $OutPutArray[$i] = $InputStrArray[$i]
                        EndIf
                    $var3 = $var3 + 5 
                Next
                ;算出的号存在输出数组中。 这个FOR循环是将输出数组中的所有元素组合成一个字符串。
                For $kk = 0 To UBound($OutPutArray)-1
                        If $OutPutArray[$kk] <> "" Then
                                $outstr = $outstr&$OutPutArray[$kk]
                        EndIf
                Next
                ;输出字符串前加上1:这2个字符
                $outstr = "1:"&$outstr
                $EncodeUser = $outstr
        Else
                $EncodeUser = $UserName
        EndIf
        Return $EncodeUser
EndFunc

评分

参与人数 2金钱 +50 贡献 +5 收起 理由
afan + 20
KLU3K + 30 + 5 非常非常的感谢啊

查看全部评分

 楼主| 发表于 2010-7-6 12:37:30 | 显示全部楼层
非常感谢楼上的!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 14:31 , Processed in 0.204819 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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