标题:
[攻略心得]
【发帖留念】PJ仓库番密码
[打印本页]
作者:
Nigel
时间:
2018-8-25 16:40
标题:
【发帖留念】PJ仓库番密码
经典游戏,大学时狂玩过,第一页50题死活做不完,233。游戏用密码记忆,每页50题对应一个密码,于是动了PJ密码的心思(做过的题可以看标准答案),今天有空搞了一上午,竟然成了。过程比结果有趣,发出来算是个留念。爱看的欢迎讨论,不爱看算了。
游戏本身的讨论这帖:
http://club.tgfcer.com/thread-7506476-1-1.html
以第一页50题为例,下面是初始密码:
[attach]1019819[/attach]
一开始10题比较简单,挨个做,每次得到一个密码,加初始密码一共11个,11个密码里会变化的只有开头和末尾两位,如下:
JZN22QAK8Y4J = init
H---------3J = 1
F---------1J = 1-2
A---------XJ = 1-3
K---------5J = 1-4
2Z--------NK = 1-5
2Y--------LK = 1-6
20--------QK = 1-7
2W--------GK = 1-8
24--------ZK = 1-9
2M--------ZJ = 1-10
鉴于每个字母可选32个值,也就是5个bit,加上上面的变化规律,很明显第一个字母管1-5道题,第二字母管6-10题,以此类推;最后两个字母是校验。
第一字母前5题的变化是J-H-F-A-K-2,每多解一题变化一次,这6字母应该对应数字0-1-3-7-15-31,把码表按截图里顺序排一下:
A-B-C-D-F-G-H-J
K-L-M-N-P-Q-R-S
T-V-W-X-Y-Z-0-1
2-3-4-5-6-7-8-9
J-H-F-A的变化,字母三次分别向前移动1、2、4位,但到了A-K-2变成向后移动了。猜想字母应该有个内部真正的顺序序列,第一目标应该是还原这个序列。于是把前5题重做,得到只解出1、2、3、4、5题的密码:
H---------3J = 1
G---------2J = 2
D---------0J = 3
S---------CK = 4
1---------MK = 5
于是32字母顺序序列为:J-H-G-F-D-?-?-A-S-?-?-?-?-?-?-K-1-?-?-?-?-?-?-?-?-?-?-?-?-?-?-2
猜想从D到A中间两个空白应该是C和B,S到K之间6空格应该是码表第二行那6个,
然后从1到2之间的序列应该是从右向左先走完码表第三行再走第四行。
光猜没用,必须有实际验证。观察前面得到的密码序列最后两个校验位,变化大多在前面那位。而且最妙的是密码首字母移动多少它就也移动多少。按照这个规律不断试密码(试不出来就硬做一遍看密码),终于得到前5题的32种组合:
JZN22QAK8Y4J = init
H---------3J = 1
G---------2J = 2
F---------1J = 1-2
D---------0J = 3
C---------ZJ = 1、3
B---------YJ = 2、3
A---------XJ = 1-3
S---------CK = 4
R---------BK = 1、4
Q---------AK = 2、4
P---------9J = 1、2、4
N---------8J = 3、4
M---------7J = 1、3、4
L---------6J = 2、3、4
K---------5J = 1-4
1---------MK = 5
0---------LK = 1、5
Z---------KK = 2、5
Y---------JK = 1、2、5
X---------HK = 3、5
W---------GK = 1、3、5
V---------FK = 2、3、5
T---------DK = 1-3、5
9---------WK = 4、5
8---------VK = 1、4、5
7---------TK = 2、4、5
6---------GK = 1、2、4、5
5---------RK = 3-5
4---------QK = 1、3-5
3---------PK = 2-5
2---------NK = 1-5
于是得到了32个字母的内部排序,果然和之前猜想的一样。
第一阶段成果确定:得到字母表序
---------------------------------------------------------------------------------
拿着前面的字母顺序看6-10题,瞬间崩溃:和前面不一样!!!
(1)白干了?(应该不会)
(2)每五题换个顺序?(心寒,算你狠)
不管怎么样,硬着头皮找找吧…………
说时短,那时长,总之补上了6-8题的一些组合:
2Z--------NK = 1-5(下略)
-Y--------LK = 6
-1--------SK = 7
-0--------QK = 6、7
-V--------DK = 8
-T--------BK = 6、8
-W--------GK = 6、7、8
-4--------ZK = 6、7、8、9
-M--------ZJ = 6、7、8、9、10
字母序为:Z-Y-1-0-V-T-?-W-?-?-?-?-?-?-?-4-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-M
顺便,码表也拉下来观察一番:
A-B-C-D-F-G-H-J
K-L-M-N-P-Q-R-S
T-V-W-X-Y-Z-0-1
2-3-4-5-6-7-8-9
这走位虽然诡异,但很有规律嘛。T和W之间那个问号,难道不该是X吗?然后从W之后8个字母到了4,难道这8个字母不应该是按第三行的顺序走位第四行吗?再然后16个字母回到了还是同列的M,难道这16个字母序列不应该是按照3、4行的走位顺序走1、2行吗?
带着这些疑问再试密码,这次不收全的,随便试几个,就为验证上面猜想的顺序。
结果:没错!就是这样!!
回头重新观察这个序列,顺序很有规律:
(1)先是从右到左Z走到Y,然后以同样的模式走Y、Z右边的两个字母,得到序列Z-Y-1-0,
(2)然后再用这个模式走Z-Y-1-0左边的4个字母,得到8字序列Z-Y-1-0-V-T-X-W,
(3)然后再按第三行这个8字序列的模式走第四行,得到16字序列
(4)最后再按后两行这个16字序列走前两行,得到32字全序列
这是6-10题字母序列的规律。回头再看前面1-5题的字母序列,同样的规律!
从2字序列到4字序列,从4字序列到8字序列,从8字到16字序列,从16到32字序列,都是这么来的!
确实,每5题的字母序列都不一样,但都是由初始密码中的字母决定的。
先把原始字母表的字母编号:
A=00,B=01,C=02,D=03,F=04,G=05,H=06,J=07
K=08,L=09,M=10,N=11,P=12,Q=13,R=14,S=15
T=16,V=17,W=18,X=19,Y=20,Z=21,0=22,1=23
2=24,3=25,4=26,5=27.6=28,7=29,8=30,9=31
初始密码中,前5题的字母为J,J=7,二进制位00111。凡是标1的位取反,把二进制的0-31按顺序写出来,再这么处理
0=00000 -> 00111=7 -> J
1=00001 -> 00110=6 -> H
2=00010 -> 00101=5 -> G
3=00011
-> 00100=4
-> F
....
7=00111
-> 00000=0
-> A
8=01000
-> 01111=15
-> S
....
15=01111
-> 01000=16-> T
16=10000-> 10111=23-> 1
....
31=11111-> 11000=24-> 2
同样,6-10题对应初始密码中字母Z->21=10101,序列为:
0=00000 -> 10101=21 -> Z
1=00001 -> 10100=20 -> Y
2=00010 -> 10111=23 -> 1
3=00011 -> 10110=22 -> 0
....
Z-Y-0-1的奇怪走位原来是这么来的…………
赶紧,按这个规律试试11-15题——
没错。
第二阶段成果确定,所有字母表序。大功一件!!
---------------------------------------------------------------------------------
密码共12位,前10位全搞定了,下面该破最后两位的校验码了。
先观察下它的增减规律:
H---------3J =
1
3J=25-07
G---------2J =
2
F---------1J =
3
D---------0J =
4
C---------ZJ =
5
B---------YJ =
6
A---------XJ =
7
XJ=19-07
S---------CK =
8
CK=02-08
R---------BK =
9
Q---------AK =
10
AK=00-08
P---------9J =
11
9J=31-07
N---------8J =
12
M---------7J =
13
L---------6J =
14
K---------5J =
15
5J=27-07
::注意,这回密码后面列的红色数字不再是题号了,而是首字母位(也就是前5题)的结果:写出二进制数后每个bit对应一题。
当然,这回重点关注的是后两位校验码。
很明显,数字每加1,校验码大多跟着加1,少数时候出现跳变。
跳变出现的条件:
(1)要么首字母跳变,比如首字母从A跳变为S,这时校验码也跳变
(2)要么是校验码已经为0无法再减,比如首字母从Q减一变为P,这时校验码出现了借位减一
对于(1),计算下差异:首字母从A到S,跳增15;校验码从19-07到02-08,也是增加15(出现了进位)
所以,校验码的变化很简单?
别忙下结论,吸取前面教训,看下6-10题的变化(再抄一遍前面的):
2Z--------NK =
0
-Y--------LK =
1
-1--------SK =
2
-0--------QK =
3
-V--------DK =
4
-T--------BK =
5
-W--------GK =
7
-4--------ZK =
15
-M--------ZJ =
31
果然不一样了,不过也算简单:字母每变化1,校验码变化2。如果看码表,校验码的走位都一样,只不过每次要间隔一个字母。
照这么说,11-16题会怎样?校验码3倍变化?
马上试试:不行。
那么4倍?再试:成了。
所以1-5题校验码跟着第一个字母变化,6-10题校验码跟着第二个字母双倍变化,11-15题校验码跟着第三字母四倍变化…………
接下来应该是8倍、16倍、32倍了吧…………
算一下初始密码“JZN22QAK8Y4J”:
“JZN22QAK8Y”对应数字7、21、11、24、24、13、0、8、30、20。先乘再加:
7x1+21x2+11x4+24x8+24x16+13x32+0x64+8x128+30x256+20x512=200209,除以1024后余573,再除以32得到余数和商:29-17,对应字母表7V。
不是8Y,是不是哪里错了?
仔细想想:最后5题,校验码不可能512倍变化。如果这样做了,最后5题校验码一次加减512,就只有2个校验码可用了。
太蠢了,所以不可能512倍。
那么是多少倍?正好,之前有朋友帮忙解出了49和50题,对比下校验码变化:
---------Y4J = 0
JZN22QAK864N = 49
JZN22QAK8F49 = 50
JZN22QAK8P4D = 49、50
按前面的方法计算,校验码变化为16倍。
看来,校验码倍率应该是1、2、4、8、16、1、2、4、8、16。到了16就跳变回1再循环,避免太大。这样很合理。
那么,按照这个倍率再计算初始密码:
“JZN22QAK8Y”对应数字7、21、11、24、24、13、0、8、30、20。先乘再加:
7x1+21x2+11x4+24x8+24x16+13x1+0x2+8x4+30x8+20x16=1274。减1024后余250,除以32的余数和商为16-7,查码表得到字母4J。
对上了,就是4J!
大功告成。
所有工作都结束了。马上算一下50个题全Pass的密码:
前十个字母为:2MYJJW91BN
算校验码:24x1+10x2+20x4+7x8+7x16+18x1+31x2+23x4+1x8+11x16=648。对应校验码KY。
马上输入密码“
2MYJJW91BNKY
”
[attach]1019839[/attach]
[
本帖最后由 Nigel 于 2018-8-25 18:23 编辑
]
作者:
erikadjy
时间:
2018-8-27 13:39
不明觉厉
作者:
yangwenli
时间:
2018-8-27 13:54
我记得在多年前的电软上就有一篇皮角密码的文章,你们都是神人
作者:
westlost
时间:
2018-8-27 15:34
posted by wap, platform: iPhone
那个好像是中科大的叫金什么来着吧,思路很清楚,虽然不是很深入
欢迎光临 TGFC Lifestyle (http://club.tgfcer.com/)
Powered by Discuz! 6.0.0