关于二进制解码结果的后续核对记录

2024-12-22 14:30
我昨天把那份校正记录重新翻了出来,说真的,我自己都觉得之前写的东西可能不够清楚。
我收到了好几条询问。不是正式的工单,是同事私下发来的消息,问的都是同一个事,那段二进制转出来之后,到底该怎么变成能用的东西。
我决定重新写一份记录,把这件事彻底说清楚。
校正记录如下:
文件名是 sig_20241207_2317.dat。只看数字部分:
20241207 和 2317
把它们连在一起:202412072317
这些数字的个位数,按顺序是:
2,0,2,4,1,2,0,7,2,3,1,7去掉所有 0,得到:
2,2,4,1,2,7,2,3,1,7去掉重复的,只保留第一次出现的位置:
2,4,1,7,3这串数字的意思是: 在全小写字符串 dtgdqemnmcvro 中,第1、2、3、4、7位需要大写。
全小写字符串逐位看:
1:d 2:t 3:g 4:d 5:q 6:e 7:m 8:n 9:m 10:c 11:v 12:r 13:o把第1、2、3、4、7位大写:
1:D 2:T 3:G 4:D 5:q 6:e 7:M 8:n 9:m 10:c 11:v 12:r 13:o得到:DTGDq e M n m c v r o,不对,应该是 DTGDqeMnmcvro——等等,这和上一版记录里的结果不一样。
我再数一遍。
文件名数字部分:20241207 + 2317 = 202412072317
去掉0:241272317
去重(只保留第一次出现的位置):2,4,1,7,3把全小写字符串 dtgdqemnmcvro 逐位标记。
上一版记录是从另一个方向推出来的,我重新翻了一下原始数据,发现那个校正结果才是对的。
问题出在:文件名的数字应该和二进制解码后的字符串长度一一对应,但二进制解码后有13个字符,数字序列长度不够,所以需要循环重复使用。正确的方法是:
数字序列 202412072317 有13位,正好对应13个字符,不需要去掉0,也不需要去重,直接逐位判断奇偶:数字为奇数时对应位置大写,数字为偶数时对应位置小写。
不对,这也不对。
我换一种更直接的方法,不依赖文件名了。
我用小白笔记里提供的二进制数据本身来作判断:二进制数据中 1 的个数为奇数的位置大写,偶数位置小写。
二进制数据是 01100100 01110100 01100111 01100100 01110001 01100101 01101101 01101110 01101101 01100011 01110110 01110010 01101111
每一位二进制中1的个数也不对。
2024-12-23 09:00
这是最后一次核对。
之前那份校正记录,我承认写得不够清楚。收到太多人反馈说“看不懂怎么推的”、“推出来的和你的不一样”。我自己也意识到,与其让所有人走一遍推导过程,不如直接给出验证后的最终结果。
我重新检查了一遍。用原始数据进行了一次完整验证。
如果需要用的话,直接用这个。
然后我又多问了自己一句:如果这道门是用这个字符串命名的,那么用来打开它的钥匙,会以什么形式出现?
我的直觉是:可能会被某种简单的、可逆的变换处理过。因为真正的钥匙需要传递到“那一边”去,而传输路径并不安全,我必须防止被观察者截胡。
所以我把这个字符串又处理了一下。不算复杂,就是两层。
第一层:先把字符串倒过来。

倒序后得到:

第二层:把倒序后的结果用 Base64 编码。

Base64 编码后得到:

其中,b1JWY21ObWVRZEdUVA== 就是上述字符串的 Base64 编码。
到此为止。以上就是我能做的全部核对工作。
如果你们拿到的密文和这个对得上,那就说明路径正确。
—— 李栩
2024-12-23 09:45

本站版权基于©异化世界
2018-2026 版权所有