能力值:
( LV7,RANK:100 )
2 楼
把程序或者算法的反汇编代码发上来才行呀。。
这样肯定看不出来的,照你的想法,MD5也能找出无数个对应关系,可是你也没法求逆~
能力值:
( LV2,RANK:10 )
3 楼
是ASP的,不是程序,无法反汇编。只能根据输入与输出猜测“黑盒”里面的东西。
我觉得是可逆的,因为很明显就能看出有一定的规律在,用的就是ASCII之类的东西。
它这算法远没MD5复杂。
6位的加密出12位的,9位的加密出18位的。
刚又去抓了几个1位的:
原字符 加密后字符
a uy
b s}
c p&
d n*
能力值:
( LV2,RANK:10 )
4 楼
终于找到了这个函数,能帮我看看可以解么?
我在不同的电脑试,都是同一字符得出同样的加密字串。好像那个seed 和Randomize会一样?
function mistake(preString) Dim texts Dim seed Dim i,length prestring = trim(preString) length = len(preString) seed = length Randomize(length) texts = "" for i = 1 to length seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32) texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32)) next dim dist dist="" for i = 1 to len(texts) if mid(texts,i,1)<>"'" then dist=dist+mid(texts,i,1) end if next mistake = dist end function
能力值:
( LV2,RANK:10 )
5 楼
初步分析后得出此算法可以逆求的结论。
先澄清几个问题:
1、LZ的本意应该是通过某种方式得到数据库中的加密字符串后,如何反过来求取明文字符串吧?
2、绝大多数情况下,密文字符串长度等于明文字符串长度的2倍,例外情况是如果产生的密文字符串中存在单引号',则过滤掉(丢弃');
3、算法中使用的伪随机数生产器函数Randomize()和Rnd()是两种特殊用法,即LZ所说的“会一样”,因为Randomize(length) 的参数仅跟明文字符串长度一样,显然变化不大,而Rnd(一个负数)按照MSDN的说法就是用这个负数参数作为随机种子,因而也变化不多。
由此可以设计出求逆方法。
能力值:
( LV2,RANK:10 )
6 楼
求逆方法大要:
1、密文字符串的奇数位置对于求逆有效,偶数位置可以忽略;
2、为了加快求逆速度,预先正向计算出(按ASP程序或者写个VB程序调用函数mistake(preString)):
int(94*rnd(-seed)+32)),其中让变量seed跑遍 1 ~ 125*(126+1);
3、对密文字符串,从串尾开始倒过来向串首开始分析,这是因为对于最后一位明文,mid(preString,i,1)和right(prestring,1)两个值是一样的;
能力值:
( LV2,RANK:10 )
7 楼
4、求取最末尾的一位明文。根据
seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32)
texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32))
和mid(preString,i,1)==right(prestring,1),设最末尾的一位明文的ASCII码值为x,得到方程组如下:
E1: chr(seedo) == 末尾密文(奇数位置的)
E2: seedo = int ( 95 * rnd ( -x - seedi *x ) + 32
根据方程E1,查ASII码表可得到整数值seedo,肯定位于32 ~ 125之间;
根据方程E2,知道seedo即可查第二步中预先造好的整数表,得到负整数值-x - seedi *x;
然后,负整数值-x - seedi *x == -x * (seedi + 1),可以做整数分解或者穷尽x的一个小范围得出x和seedi。
需要注意的是由于是Int取整,查整数表时有可能出现几个结果,均需要算一下。
能力值:
( LV2,RANK:10 )
8 楼
5、最末尾的一位明文一位明文求出来后,还是根据密文产生公式:
seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32)
texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32))
利用奇数位置的密文,从后往往前逐步逆推倒数第二位明文,方法还是查表。
能力值:
( LV2,RANK:10 )
9 楼
大约就是这些。分成好几次回复,主要是感觉看雪的回复编辑框太小了,真不方便一次性写很多。
应该没什么问题吧,欢迎指正。
能力值:
( LV2,RANK:10 )
10 楼
其实,对于负整数值-x - seedi *x == -x * (seedi + 1)的整数分解问题,并不需要真的去分解,可以事先造好一个127*127的乘积表,以后遇到乘积 x * (seedi + 1),查表即知乘积项。
能力值:
( LV2,RANK:10 )
11 楼
感谢楼上jeffcjh 的分析。另外留意到CSDN也有位兄弟研究过,特此贴上链接 d2dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3j5X3q4T1P5i4c8Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0V1I4y4U0V1I4i4K6t1$3L8X3u0K6M7q4)9K6b7R3`.`. 供大家参考。
我的解密之路只限于穷举。因此后来是这么干的:
1. 生成6位字符的字典,以数字优先;
2. VB写了个小程序,依次生成对应字符的加密字符;
3. 搜索一下我要查询的加密的字符串--还真有!
至于从密码学的角度,怎么求逆,有兴趣的可以继续讨论一下。
能力值:
( LV2,RANK:10 )
12 楼
有一点小错误,第5步:
5、最末尾的一位明文一位明文求出来后,还是根据密文产生公式:
seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32)
texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32))
利用奇数位置的密文,开始求取第一个明文字符,因为此时知道seed的初值(seed = length),往后依次求取第二个明文字符、第三个.......
能力值:
( LV2,RANK:10 )
13 楼
我看了 b32K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3j5X3q4T1P5i4c8Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0V1I4y4U0V1I4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1t1%4i4K6W2r3i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1$3i4K6R3K6i4@1t1K6i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4K6R3H3i4K6W2p5i4@1f1^5i4@1t1%4i4@1q4r3i4@1f1#2i4@1p5@1i4@1p5%4i4@1f1@1i4@1u0p5i4K6V1K6i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1$3i4@1p5H3i4@1t1%4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4K6S2q4i4K6W2r3i4@1f1$3i4K6W2p5i4@1p5#2i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1%4i4@1q4q4i4K6V1%4i4@1f1$3i4@1t1K6i4K6V1#2i4@1f1^5i4@1u0r3i4K6V1^5i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1@1i4@1t1^5i4K6S2p5i4@1f1#2i4@1t1H3i4K6V1I4i4@1f1#2i4K6W2o6i4@1t1H3i4@1f1$3i4K6V1$3i4@1t1&6i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1^5i4@1u0r3i4K6R3%4i4@1f1#2i4K6V1I4i4@1p5J5i4@1f1K6i4K6R3H3i4K6R3J5
你原来的暴力穷举法就属于非密码学意义上的解决方法,对于比较复杂的口令显然是无效的。现在分析的破译方法的时间复杂度是多少呢?估计如下:
对于每个明文字符的求解,其实都是查表,故为常数时间O(1)。
对长为2n的密文,总的破译时间大约是O(n),考虑到可能在查表中遇到几个情况,故实际时间要多一些,但肯定不会多很多,因此求逆是极快的,基本不会有慢的感觉,与暴力破解相比。
能力值:
(RANK:1060 )
14 楼
不是单射,会逆出很多结果,比如密文>:h7%Kn*(=C+对应下面任意明文组合
[['`', 'a'], ['b', 'j', 'f', '^'], ['c', 'k', '[', 'S'], ['1', '3', '/'], ['"', '2', '*'], ['3']]
密文是明文,前一位密文,最后一位明文的函数
先穷举最后一位明文再求逆别的密文即可
能力值:
( LV2,RANK:10 )
15 楼
[QUOTE=forgot;1041171]不是单射,会逆出很多结果,比如密文>:h7%Kn*(=C+对应下面任意明文组合
[['`', 'a'], ['b', 'j', 'f', '^'], ['c', 'k', '[', 'S'], ['1', '3', '/'], ['"', '2', '*'], ['3']]
密文是明文...[/QUOTE]
其实并不需要求取所有原像,只要一个即可,对于身份认证都是等价的。