“数据量不足,无法完成推导。需要至少一条对应明文。”
沈前锋皱起眉头。
五条密文,没有一条知道原文。这就像要解开一个数学方程,却只有未知数,没有常数。
除非……
他看向47号电文。
那份关于闸北刺杀的电文。
虽然不知道原文,但他知道结果——刺杀发生了,日军宪兵队出动了。那么电文里至少应该包含“闸北”“行动”“目标”这些关键词。
沈前锋重新拿起铅笔,在纸上写下几个词:
闸北。
行动。
目标。
清除。
确认。
然后他打开系统,在分析仪里选择“手动输入假设明文”。他输入“闸北行动目标清除确认”这九个字,对应47号电文的四十七个字符。
系统提示:“字符长度不匹配。”
当然不匹配,密文长度是明文的好几倍,这是基本加密常识。
沈前锋删掉重来,输入“今日于闸北实施清除行动目标已确认”,十七个字。
还是不行。
他想了想,换成日文思考。
如果是日军参谋起草的电文,会怎么写?“本日、闸北にて清除行动を実施、目标确认済み”——大概就是这个长度。
他数了数字符,二十一个。
而47号密文是四十七个字符,多出来的二十六个字符,可能就是填充码、校验码和加密后的冗余。
沈前锋在系统里输入这串日文假想明文,选择“尝试匹配”。
分析仪再次运行。
这次进度条走得很顺畅,五秒后,屏幕上弹出一行字:
“匹配度37%。发现可能规则:每两个明文字符对应五个密文字符。填充字符使用固定序列“2457”。”
37%的匹配度不算高,但已经足够说明方向正确。
更重要的是,分析仪发现了“固定序列”。
在密码学里,固定序列就像是签名。如果每份电文都使用相同的填充序列,那么只要找到这个序列,就能把填充部分剥离出去,剩下的就是真正的加密内容。
沈前锋立刻让分析仪扫描其他四份电文,寻找“2457”这个序列。
19号电文,在第十六到十九字符位置,找到“2457”。
32号电文,在第二十二到二十五字符位置,找到“2457”。
58号电文,在第九到十二字符位置,找到“2457”。
69号电文,在第三到第六字符位置,找到“2457”。
全部命中。
沈前锋感到心跳加快了。他让分析仪剔除所有“2457”序列,然后重新计算五份电文的加密内容长度。
结果出来了:
19号电文,剔除后剩三十八个字符。
32号电文,剩四十一个字符。
47号电文,剩四十三个字符。
58号电文,剩三十六个字符。
69号电文,剩三十四个字符。
这些数字,如果除以5,得到的商分别是7.6、8.2、8.6、7.2、6.8。
不对。
沈前锋重新计算,这次把字符数除以2.5——因为两个明文字符对应五个密文字符,那么每个明文字符对应2.5个密文字符。
结果出来了:
19号电文,对应约15.2个明文字符。
32号电文,对应约16.4个明文字符。
47号电文,对应约17.2个明文字符。
58号电文,对应约14.4个明文字符。
69号电文,对应约13.6个明文字符。
取整数,大约是15、16、17、14、13个字。
这个长度,完全符合简短军事指令的风格。
沈前锋靠在椅背上,长长吐出一口气。
他找到门了。
虽然还没有钥匙,但至少知道门是什么形状,用什么材料做的。这五份电文使用的确实是另一套密码,一套更简单、更直接、用于特殊行动的备用密码。
而备用密码的规则,很可能就写在那半页被撕掉的注释上。
他需要找到上半册密码本。
或者,找到更多使用这套备用密码的电文。
沈前锋看了眼时间,凌晨四点二十分。窗外的天色依旧漆黑,但雨已经停了。远处传来黄浦江上轮船的汽笛声,沉闷而悠长。
他关掉系统界面,整理好桌上的电文抄录件。在47号电文旁边,他最后写下两个字:
“诱饵。”
如果这份电文真的是日军自导自演,那么它不仅是诱饵,还是测试——测试抗日力量能否破译“紫电”。如果破译了,就会相信电文内容,进而采取行动。
然后落入陷阱。
沈前锋把电文锁进抽屉,起身走到窗边。潮湿的夜风吹在脸上,带着江水特有的腥味。
他知道自己该做什么了。
明天,不,今天白天,他要去见潘丽娟和黄英。把这份发现告诉她们,让她们停止一切基于47号电文情报的行动。
然后,他们要反过来利用这个发现。
既然日军用假电文做诱饵,那么他们也可以假装上钩,引出真正的大鱼。
但这个计划有一个前提:
必须找到上半册密码本,彻底破解“紫电”。否则,他们永远分不清哪些电文是真的,哪些是假的。
雨后的上海,在黎明前的黑暗里安静得像一座巨大的坟墓。
而沈前锋知道,这座坟墓里埋着的不仅是死人,还有更多活着的秘密。
他需要一把足够锋利的铁锹。