找回密码
 加入
搜索
查看: 4482|回复: 8

一个比较刁钻的算法问题解密

  [复制链接]
发表于 2014-2-8 09:46:19 | 显示全部楼层 |阅读模式
本帖最后由 lanfengc 于 2014-5-22 08:11 编辑

群里有人提出这个问题
求解a、b和结果三者之间的算法或规则
a=qWaYmA,,b=6
a=qWeYmA,,b=7
a=qWJhmw,,b=21
a=qWJomw,,b=28
a=qWZkmw,,b=64
a=qWZlmw,,b=65
a=qWZmmw,,b=66
a=qWZpmw,,b=69
a=qWdmmw,,b=76
a=qWhjmw,,b=83
a=qWlnmw,,b=97
结果=6003

a=qWWYmQ,,b=5
a=qWaYmQ,,b=6
a=qWFinA,,b=12
a=qWFknA,,b=14
a=qWJjnA,,b=23
a=qWJnnA,,b=27
a=qWNjnA,,b=33
a=qWNpnA,,b=39
a=qWRlnA,,b=45
a=qWRonA,,b=48
a=qWVlnA,,b=55
a=qWdjnA,,b=73
a=qWdonA,,b=78
a=qWlgnA,,b=90
a=qWlhnA,,b=91
a=qWVonA,,b=58
结果=6004

a=qWWYmg,,b=5
a=qWaYmg,,b=6
a=qWJjnQ,,b=23
a=qWNgnQ,,b=30
a=qWNmnQ,,b=36
a=qWRpnQ,,b=49
a=qWVhnQ,,b=51
a=qWVonQ,,b=58
a=qWdjnQ,,b=73
a=qWhlnQ,,b=85
结果=6005

算法(规则)是别人用php写的,我研究了几天解不出来,大家可以看看哦。
求解a、b和结果三者之间的算法或规则,解出来还有100元新年红包哦。
我写了个辅助验证器:http://www.ipdizhi.com/ss1.php


由于本人不懂PHP代码, 所以那天分析了半个小时,没有给出具体的解决办法, 只是给出了思路. 现在有个PHP的达人把PHP版的解密函数搞出来了, 我看了看,然后又百度了1小时, 改成AU3版本的,现在发出来给各位坛友借鉴.
PHP原版页面:http://cn.v2ex.com/t/99120

AU3版解密函数代码发布过一次. 但是应提问者要求,暂时不公开代码. 所以把下面的代码编辑掉了.  求斑竹给这帖子删除了吧. 或者留着帖子等以后我公布出来吧.
本人写的解密函数的结果图片



#Include <ACN_HASH.au3>
#include <array.au3>
$a = 'pWFqbWGalak'
$b = '1991'
MsgBox(0,"解密结果:",'$a='&$a&@CRLF&'$b='&$b&@CRLF&'$Result='&DecodeByFengzi($a,$b))

ConsoleWrite(DecodeByFengzi('qWaYmA',6)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWeYmA',7)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWJhmw',21)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWJomw',28)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWZkmw',64)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWZlmw',65)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWZmmw',66)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWZpmw',69)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWdmmw',76)&@CRLF)
ConsoleWrite(DecodeByFengzi('qWhjmw',83)&@CRLF)

Func DecodeByFengzi($a,$b)
        If $a='' Or $b='' Then Return ''
        ;如果a的位数不是偶数位,则后面补零再解码
        If Mod(StringLen($a),2)<>0 Then
                $str = StringTrimRight(StringTrimLeft(_Base64Decode($a&'0=='),2),2)
        Else
                $str = StringTrimLeft(_Base64Decode($a&'=='),2)
        EndIf
        ;取出b的数字部分
        $b = String(Int($b)) 
        ;将解密结果输出核对
;~         ConsoleWrite("Decoded: "&$str&@CRLF)
        ;获取结果字符数量
        $str_length=Int(StringLen($str)/2)
        ;如果a的位数为奇数, 则证明最后一位是附加的. 不处理
        If Mod(StringLen($a),2)<>0 Then        $str_length=$str_length-1
        ;重定义数组存放结果数据
        Dim $str_array[$str_length]
        ;将解密结果每两位分割并赋值给结果数组
        For $i=1 To $str_length
                $str_array[$i-1]=Int('0x'&StringLeft($str,2))
                $str=StringTrimLeft($str,2)
        Next
        ;对第一位解密  第一位ASCII码减去 115
        $str_array[0] = chr(Int($str_array[0]) - 115)
        ;定义b无效时候的密钥表
        Local $keyNumber[9] = [104, 101, 114, 111, 112, 97, 115, 115, 52]
        Local $j = 0 , $result=$str_array[0]
        ; 从第二位开始循环处理
        For $i = 1 To $str_length-1
                ;按位取出b的ASC码值
                $b_chr = Asc(StringLeft($b,1))
                $b=StringTrimLeft($b,1)
                ;如果b的asc码有效 则用b的asc码做参数 否则从密钥表中取
                If $b_chr Then
                        ;b有相应的值,则减去其ascii码值
                        $str_array[$i] = chr($str_array[$i] - $b_chr)
                Else
                        ;从一个密钥表里循环取值并减去
                        $str_array[$i] = chr($str_array[$i] - $keyNumber[Mod(($j) , 9)])
                        $j=$j+1
                EndIf
                $result&=$str_array[$i]
        Next
        ;将结果数组显示出来
;~         _ArrayDisplay($str_array)
        ;输出结果用于查看
;~         ConsoleWrite($result&@CRLF)
        Return $result
EndFunc

本帖子中包含更多资源

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

×
发表于 2014-2-8 10:16:48 | 显示全部楼层
强大的楼主分析,学习了。
发表于 2014-2-8 16:48:22 | 显示全部楼层
强大的逻辑能力
发表于 2014-2-10 11:51:44 | 显示全部楼层
强大的看不懂。。。
发表于 2014-2-10 12:09:03 | 显示全部楼层
太高深,看不懂了
发表于 2014-2-10 21:01:52 | 显示全部楼层
好吧,我看不懂~
发表于 2014-2-12 20:14:37 | 显示全部楼层
不知所云。
发表于 2014-2-13 05:28:38 | 显示全部楼层
这个算法太难了...唉
发表于 2014-2-13 21:15:46 | 显示全部楼层
不懂啊!

这个有什么实际用途?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-25 13:19 , Processed in 0.078255 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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