回复 14# sxd
最后加了EndFunc ;==>CNCMAXDecode
感谢您的代码,看来比较复杂,调用两个自定义的函数都无法正常使用,函数返回还是有问题,希望能检查一下代码!
我先随便贴两段转换后的结果,方便验证!
比如加密后的用户名是: 15003722968
那么解码后的用户名是: 2:3w97yRzyhLk
比如加密后的用户名是: 15837214567
那么解码后的用户名是: 2:3w7yWHmolm8 回复 14# sxd
学习学习 有没有电信的?它这个是用来封路由器的。 看看这个是易语言的
.版本 2
.支持库 iext
.子程序 解密账号, 文本型
.参数 账号, 文本型
.局部变量 码表1, 文本型
.局部变量 码表2, 字节集
.局部变量 码表3, 整数型, , "4"
.局部变量 账号长度, 整数型
.局部变量 计次, 整数型
.局部变量 找到位置, 整数型
.局部变量 数1, 整数型
.局部变量 数2, 整数型
.局部变量 结果文本, 文本型
码表1 = “9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST”
码表2 = { 17, 52, 201, 35, 117, 24, 215, 226, 18, 53, 41, 43, 236, 182, 35, 25 }
码表3 = 4
码表3 = 5
码表3 = 0
码表3 = 37
账号长度 = 取文本长度 (账号)
.计次循环首 (账号长度, 计次)
找到位置 = 寻找文本 (码表1, 取文本中间 (账号, 计次, 1), 1, 假)
.如果 (找到位置 ≠ -1)
.判断开始 (计次 ≤ 16)
数1 = 码表2 [计次]
.默认
数1 = 计次 - 1
数2 = 16
汇编 (数1, 数2)
数1 = 码表2 [数2 + 1]
.判断结束
数2 = 码表3
数2 = 数2 + 码表3
数2 = 数2 + 码表3
数1 = 位异或 (数1, 数2)
数1 = 位异或 (数1, 码表3 )
数1 = 数1 + 找到位置 - 1
数2 = 62
汇编 (数1, 数2)
码表3 = 数1
码表3 = 数2
结果文本 = 结果文本 + 取文本中间 (码表1, 数2 + 1, 1)
数2 = 数2 + 9433
码表3 = 位异或 (码表3 , 数2)
.否则
结果文本 = 结果文本 + 取文本中间 (账号, 计次, 1)
.如果结束
码表3 = 码表3 + 5
.计次循环尾 ()
结果文本 = 地区代码.标题 + 结果文本
返回 (结果文本)
.子程序 汇编
.参数 a, 整数型, 参考
.参数 b, 整数型, 参考
置入代码 ({ 139, 77, 8, 139, 1, 139, 125, 12, 153, 247, 63, 137, 1, 137, 23, 90 }) 你问客服他会告诉的不是? 太厉害了,这个论坛有如此多的热心的高手,太好了 嗯 没测试 现在看看 错误很多但是.加密里 只有一个1: 我不知道 2:是怎么来的 函数有问题 这要是c++我把脑袋给楼主,明显不是c++,上面写着php嘛, 高手啊,这都是 在sxd版的代码基础微改一下
;~ 比如加密后的用户名是: 15003722968
;~ 那么解码后的用户名是: 2:3w97yRzyhLk
;~ 比如加密后的用户名是: 15837214567
;~ 那么解码后的用户名是: 2:3w7yWHmolm8
#include <array.au3>
;$aa=StringSplit('15837214567','',2)
MsgBox(0, 0, CNCMAXEncode(InputBox("input","输入",'15837214567')))
Func CNCMAXEncode($input)
If IsString($input) Then $input = StringSplit($input, '', 2)
$DicStr = "9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST"
Dim $DicB
$DicB = 0x11
$DicB = 0x34
$DicB = 0xC9
$DicB = 0x23
$DicB = 0x75
$DicB = 0x18
$DicB = 0xD7
$DicB = 0xE2
$DicB = 0x12
$DicB = 0x35
$DicB = 0x29
$DicB = 0x2B
$DicB = 0xEC
$DicB = 0xB6
$DicB = 0x23
$DicB = 0x19
$num4 = 0x25
Dim $di = 0, $var2 = 0, $index = 0, $var3 = 0
Dim $outstr
$outstr = ""
For $i = 0 To UBound($input) - 1
For $j = 0 To StringLen($DicStr) - 1
If $input[$i] == StringMid($DicStr, $j + 1, 1) Then
If $i >= 0x10 Then
$di = $DicB
Else
$di = $DicB[$i]
EndIf
$var2 = $num4 * 3
$index = Mod((BitXOR(BitXOR($di, $var2), $var3) + $j), 0x3e)
$outstr[$i] = StringMid($DicStr, $index + 1, 1)
$var2 = $index
$num4 = BitXOR($num4, $var2 + 0x24d9)
EndIf
Next
If $i >= UBound($outstr) Then
ReDim $outstr[$i]
$outstr[$i] = $input[$i]
EndIf
$var3 = $var3 + 5
Next
$out = ""
For $k = 0 To UBound($outstr) - 1
$out = $out & $outstr[$k]
Next
Return "2:" & $out
EndFunc ;==>CNCMAXEncode 回复 25# 3mile
再次感谢3mile、sxd两位大大。测试已经转码成功了,到家后研究一下代码! 向楼主认真学习学习!
页:
1
[2]