能力值:
( LV2,RANK:10 )
|
-
-
2 楼
上面不是有keygen嘛?
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
我要自己写啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个就是左移相加,和小学做的乘法竖式一个意思。这里左移6位就是乘以64。d1,d2,d3,d4就相当于中间码的64进制的“千,百,十,个“位。用%和/就可以算出来了。
d4 = 中间码 % 64
d3 = (中间码 >> 6) % 64
d2 = (中间码 >> 12) % 64
d1 = 中间码 >> 18
不过,这样算下来d2,d3,d4都是0~63,可能正好可以做你的那个keygen的index;不过要是单独看这个帖子里的式子,((((D1<<6+D2)<<6)+D3)<<6+D4)=中间码。D1~D4的范围应该都是0~255。
0~63的时候没有进位
64~127进位为1
128~191进位为2
192~255进位为3
根据你需要的数字的范围,在逆推的时候,把前面那一位减去借位的数字就行了。比如你想算的d2,d3,d4在64到127之间。那么进位都是1
d4 = 中间码 % 64 + 64
d3 = ((中间码 >> 6) - 1) % 64 + 64
d2 = ((((中间码 >> 6) - 1) >> 6) - 1) % 64 + 64
d1 = (((((中间码 >> 6) - 1) >> 6) - 1) >> 6) - 1
只不过d1的范围这里无法指定,应该最后算出来在什么范围就在什么范围了。
举个例子,比如中间码是 0x123456,要求d2,d3,d4在64以内,那么
d1=0x04
d2=0x23
d3=0x11
d4=0x16
"d1d2d3d4"=0x04231116
如果要求d2,d3,d4在64~127之间,那么
d1=0x03
d2=0x62
d3=0x50
d4=0x56
"d1d2d3d4"=0x03625056
其他的范围以此类推就行了。
如有不对的地方,欢迎讨论。
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
这个就是左移相加,和小学做的乘法竖式一个意思。这里左移6位就是乘以64。d1,d2,d3,d4就相当于中间码的64进制的“千,百,十,个“位
呵有道理啊,这么简单我都没想到郁闷啊!
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
恩你分析得很全面,他算法里面D1,D2,D3,D4范围在1到64要考虑进位
|
|
|