能力值:
(RANK:650 )
|
-
-
2 楼
http://bbs.pediy.com/showthread.php?t=74205
|
能力值:
(RANK:1130 )
|
-
-
3 楼
把头像换掉,可以同情你
|
能力值:
( LV15,RANK:2473 )
|
-
-
4 楼
等发哥来评价你们的头像
|
能力值:
( LV11,RANK:188 )
|
-
-
5 楼
开始考虑换成ccfer的头像
|
能力值:
(RANK:1060 )
|
-
-
6 楼
还是ccfer的头像牛逼
|
能力值:
(RANK:280 )
|
-
-
7 楼
偶的头像也被论坛里一个朋友用了,正准备找张新的
|
能力值:
(RANK:280 )
|
-
-
8 楼
我的注册机覆盖的范围比你的计算结果更大一些
关于key的计算我的理解是
根据"ijkl"的触发条件key[4], key[6], key[8], key[10]有4种可能
if (temp[key[3]*4+key[4]] == temp[key[5]*4+key[6]]) { if (temp[key[7]*4+key[8]] == temp[key[9]*4+key[10]]) sRet = sRet + 'l'; else sRet = sRet + 'k'; } else { if (temp[key[7]*4+key[8]] == temp[key[9]*4+key[10]]) sRet = sRet + 'j'; else sRet = sRet + 'i'; }
然后根据对临时数组中修正,
key[11],key[14]和key[17]共有6种可能,
123
132
213
231
312
321
key[20],key[23]和key[26]同样也有6种可能,
temp[key[1]*4 + key[11]] = temp[key[12]*4+key[13]]; temp[key[1]*4 + key[14]] = temp[key[15]*4+key[16]]; temp[key[1]*4 + key[17]] = temp[key[18]*4+key[19]]; temp[key[2]*4 + key[20]] = temp[key[21]*4+key[22]]; temp[key[2]*4 + key[23]] = temp[key[24]*4+key[25]]; temp[key[2]*4 + key[26]] = temp[key[27]*4+key[28]];
最后根据"ae"的触发条件
key[29], key[30], key[31]和key[32]有20种可能
0001
0002
0003
0011
0012
0013
0020
0021
0022
0023
0100
0200
0300
1100
1200
1300
2000
2100
2200
2300
key[45], key[46], key[47]和key[48]同样也有20种可能
if (temp[key[29]*4+key[30]] == temp[key[31]*4+key[32]]) sRet = sRet + 'e'; else sRet = sRet + 'a';
if (temp[key[45]*4+key[46]] == temp[key[47]*4+key[48]]) sRet = sRet + 'e'; else sRet = sRet + 'a';
因此前53位不重复的key应该有4*6*6*20*20=57600
因为name和key没有一一对应的关系,所以计算起来很简单,我的做法是
先随机生成一个不重复的长度为12,全部由不为z的小写字符组成的字符串,
为了确保大小排序后gh相连,然后再将第8大的字符搬到第7大的字符之后即可,这样就覆盖了用户名的所有可能
|
能力值:
(RANK:280 )
|
-
-
9 楼
这里我不再单独计算bcd和fgh是因为根据临时数组的调整判断,这些值应该是固定的
以第一次计算b为例, 数组的值为
{0x1E, 0x28, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E}
参考如下触发条件
if (temp[key[37]*4+key[38]] > temp[key[39]*4+key[40]]) sRet = sRet + 'b'; else if (temp[key[37]*4+key[38]] < temp[key[39]*4+key[40]]) sRet = sRet + 'c'; else if (temp[key[37]*4+key[38]] == temp[key[39]*4+key[40]]) sRet = sRet + 'd';
因此key[37],key[38]必须是01
接下来继续第一次计算c, 数组的值为
{0x1E, 0x1E, 0x28, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E}
考虑到触发条件因此key[39],key[40]必须是02
因此对于bcd, fgh的控制字节是固定的
|
能力值:
( LV2,RANK:140 )
|
-
-
10 楼
[QUOTE=mstwugui;519185]关于key的计算我的理解是
根据"ijkl"的触发条件key[4], key[6], key[8], key[10]有4种可能
引用:
if (temp[key[3]*4+key[4]] == temp[key[5]*4+key[6]])
{
if (temp[key[7]*4+key[8]] == temp[key[9]*4+key[10]])
sRet = sRet + 'l';
else
sRet = sRet + 'k';
}
else
{
if (temp[key[7]*4+key[8]] == temp[key[9]*4+key[10]])
sRet = sRet + 'j';
else
sRet = sRet + 'i';
}
[/QUOTE]
这个对, 因为key[4]和key[6]的值互换后,等式依然成立,所以注册码总数*2.
其他恒等条件类似。
这也导致了用户名和注册码之间是多对多的关系。
如果你的数字是准确的话,注册码的数量 Rs = 1152 * 57600 = 66355200,多多了
即通过一个固定排列的注册码代表字符串(如abcdefghijkl),可以生成任意配对的57600个注册码和9657700用户名。
嗯,还是乌龟大师牛!
|
能力值:
(RANK:280 )
|
-
-
11 楼
key[4]和key[6]是可以互换的,但是只有2种可能01或是10
key[8]和key[10]也一样可以互换,同样还是只有两种可能02或是20
你前面计算的1152里面有部分和我的计算是重复的,而且我计算的是控制字节的概率
因此前53位合法key的总数还是57600
|
|
|