第200章 四百行压成十七行,每一行都不能浪费
作者:
佚名 更新:2026-04-22 14:02 字数:4875
压缩包图標卡在碎屏裂缝里。
灰毛衣盯著它看了十二秒。不是犹豫。是在等手稳。
保温杯刚放下,右手指尖还有零点几毫米的振幅。枸杞水凉透了,杯壁和指尖差不多温度,分不清是杯子凉还是手凉。
他点了解压。
进度条跑得快。手机內存不够,卡了两次。第二次弹出提示——“存储空间不足,建议清理大文件”。
灰毛衣把相册里327张外卖截图批量清了。
进度条跳到100%。
文件夹展开。三样东西。
第一个:oblivion_source_v1.0.bin。
遗忘协议完整母本。二进位。1.7tb。
灰毛衣扫了一眼文件头,前四十八个字节的排列方式就够了——这不是拷贝。没有拷贝权限。是师兄一个字节一个字节看著、记著、再敲出来的。
1.7tb。
手抄。
四十七天。
他没打开。先看第二个。
第二个:log_day1-47.txt。纯文本。42kb。
格式很熟。师兄写日誌的习惯从读研就没变——日期用年月日不用时间戳,正文不分段,標点只有句號和逗號,偶尔一个感嘆號,表示他骂人了。
>day1。进来了。比想像的小。操作台键盘布局奇怪。回车键在左边。適应了十分钟。开始抄源码。
>day2。抄了3gb。速度太慢。发现接口內部数据以光子態存储。没有物理介质。我在用一部火星文对照表翻译外星字典。
>day3。手指麻了。键盘太硬。回车键要用力摁。右手小指起了泡。
day4到day11,技术记录。抄码进度。接口结构分析。穿插著一些短句。
>day7。没吃的。不饿。可能这里不需要吃东西。但想吃酸菜面。想得很具体。连调料包太咸都想起来了。
灰毛衣的拇指停在屏幕上。
三秒。
继续滑。
>day14。发现遗忘协议的底层逻辑不是刪除记忆。是刪除“你相信自己存在”这件事本身。非常优雅的设计。如果不是用来杀人的话。
>day15。开始想办法堵藉口。试了纯代码塞入。4小时后被消化乾净。证实猜想。软体堵不住。必须用硬体。
>day16。没有硬体。
>day17。有一个硬体。
五个字。
灰毛衣没往下滑。盯了很久。
day17。师兄想明白的日子。
>day18到day22。没有日誌。
五天空白。
>day23。想通了。没什么好纠结的。把源码抄完。把该留的留好。剩下的交给时间。
>day24。开始写告別。第一版写了八千字。太长了。刪了。重新写。第二版四千字。还是太长。第三版两千字。第四版六百字。第五版就那行。
“那行”是什么,灰毛衣知道。
“第二条命,换你活著。跑。”
八千字刪到十三个字。
刪了多少遍。
>day26。那个东西又来了。从深处走出来。站在三米外看我。银白色。没有脸。但我觉得它在笑。不確定。可能是我太久没见活物了。
>day27。它还在。我跟它说话。它不回。试著给它看我手机壁纸。壁纸是师弟拍的。实验室门口的柳树。它看了很久。
>day28。它问我你们还会做梦吗。
>day29。它坐在操作台边上不走了。坐了一整天。我抄码。它看著。偶尔歪头。像听不懂。但不打扰。挺乖的。
灰毛衣把手机翻过来。屏幕朝下扣在膝盖上。
四秒。翻回来。继续。
>day33。源码抄到89.4%。手指纹都磨平了。回车键油漆也掉了。银白色那个跟我絮叨了半天。它管说话叫“振动”。说自己以前很会“振动”。现在忘了大部分。只记得一段。
>day34。它说那段振动的內容是“好喝”。我没听懂为什么这两个字值得记。它也说不上来。就是忘不掉。
灰毛衣攥著手机。不紧。手指自然弯曲的力度。指甲没发白。呼吸十四次每分钟。正常值。
>day41。源码抄完了。1.7tb。全文手抄。没有错。检查了三遍。
>day42。开始叠代加密。
他往下滑的手停了。
回放。看了两遍。
“开始叠代加密。”
师兄在世的时候,两人共用一套自创的编码规则。本科时课上无聊编著玩的。火星文变体。加了几层数学变换。安全性约等於拿报纸糊金库大门。
但够用。两个人的秘密够用这种程度的锁。
day42。源码抄完的第二天。距离他用自己堵藉口还剩五天。他开始叠代加密。
>day42。第一次叠代。在原有基础上加入椭圆曲线。密钥长度翻倍。耗时9小时。不是因为难。是手指不太听话了。
>day43。接口开始反噬。头痛。像有人拿勺子舀脑浆。忘了手机锁屏密码。试了四次才想起来。今天的日期记不太清。但师弟的枸杞水配方还记得——十五颗。他数过。强迫症。
>day44。第二次叠代。把椭圆曲线替换成格密码。量子级。密钥生成逻辑比第一版简洁三分之一。因为我算不动了。脑子里能调用的东西越来越少。但越少就越不能浪费。每一行都得乾净。
灰毛衣盯著这六个字。“每一行都得乾净。”
他想起第一次看师兄底层代码时的判断——“笔法模仿他却更老练”。
不是更老练。
是更穷。
一个程式设计师把脑容量从100%烧到30%,剩下那30%写出来的代码,每一个字节都经过了取捨。没有冗余的资格。没有华丽的资格。
智能精准。只能最短路径。
所以看起来“更老练”。
>day45。第三次叠代。最终版。密钥生成逻辑缩到十七行。从第一版的四百行到十七行。脑子里只剩碎片了。忘了我妈长什么样。忘了导师的名字。忘了本科是哪个学校。
>记得的东西:师弟姓什么。枸杞十五颗。酸菜面调料包太咸。
>这三样够用了。密码用的是第三样。
灰毛衣把手机放在地上。
站起来。走到操作台前。弯腰。
回车键在左边。油漆掉了。露出灰色塑料基底。上面有指纹磨过的弧度。
他伸手按了一下。
硬。很硬。
手感和实验室那台二手联想的空格键差不多。师兄总用掌根拍空格,说手指按太累。被导师骂过。没改。
灰毛衣鬆开手指。坐回地上。拿起手机。
第三个文件。
文件夹。名字六个字加一个句號。
**给师弟的。別哭。**
加密。
密码输入框弹出来。没有提示。没有找回选项。
师兄说了。day45。密码用第三样。
灰毛衣打字:“调料包太咸”。
错误。
“酸菜面调料包太咸”。
错误。
他停了。
不对。这是第三次叠代后的加密。十七行逻辑。密钥种子要经过格密码变换才能输出最终密码。
他需要逆向还原师兄在“脑子只剩30%”时设计的那十七行。
灰毛衣翻回day44和day45的日誌。逐字看。三遍。
师兄脑子只剩碎片时,写密码用的素材只有三样——师弟姓什么,枸杞十五颗,酸菜面调料包太咸。不是密码本身。是密钥种子。
他在碎屏手机上打开空白文档。一行一行写。
前四行:標准格密码初始化。公式就那样。
第五到八行:师兄的简化路径。砍掉异常处理,砍掉溢出检测。一个快死的人不需要检测溢出。溢出了又怎样。
第九到十二行,他停了。哈希链。师兄第二次叠代用的標准sha,第三次脑子只剩碎片,他会换什么?
灰毛衣翻回day43——“师弟的枸杞水配方还记得——十五颗。”
十五。自定义哈希,模为15。
第十三到十五行:格向量旋转。角度参数从三样东西里抽——性的unicode值、十五、字符串编码长度。
第十六行:输出截断。截取前几位?day45最后一句:“这三样够用了。”三。前三位。
第十七行:终结符。
他把十七行逻辑跑了一遍。碎屏手机处理器嗡嗡响。两秒后输出一串乱码——19位混合字符。
粘进密码框。
回车。
文件夹打开了。
---
一个文件。
视频。.avi格式。3.2mb。时长4分17秒。
灰毛衣点了播放。
画面亮了。
零號区。天花板视角。广角。略有畸变。像老式监控探头拍的。画质很差,480p都不到,颗粒粗得像下雨。
操作台在画面正中。
师兄躺著。
穿那件洗到发白的格纹长袖。一只袖子卷上去了,另一只没有。深色裤子,看不清牌子。鞋没脱。运动鞋。鞋底朝上,左脚外侧的磨损清清楚楚——走路外八字的人磨那个位置。
师兄走路外八字。被他笑过。师兄说程式设计师不需要走好看,又不选秀。
手放在键盘上。十个指头。灰毛衣数了一遍。十个。都在。展开的。放鬆的。不像在敲键盘。像敲完了。搁著。
眼睛看著上方。看著镜头。
或者——穿过镜头——看著以后会打开这段视频的人。
没有声音。
四分钟的画面里,师兄没有动过。呼吸的起伏都看不出来。
但灰毛衣知道他还活著,因为画面第1分23秒,右手小指抽动了一下。
抽了一下就不动了。
灰毛衣看了第一遍。拉回进度条。
第二遍他盯著师兄的脸。颗粒太粗,五官模糊,但轮廓能辨认。长脸。颧骨不高。下巴偏尖。额头上一撮头髮翘著——师兄的呆毛。从本科翘到现在,用髮胶都压不下去。
第三遍他注意到操作台旁地面上有个东西。亮度很低,缩在桌腿阴影里。放大了也看不清。
但形状像手机。师兄的手机。屏幕朝上。亮著。
灰毛衣两根手指在碎屏上掐放大。像素炸成色块。完全看不清內容。
但他知道壁纸是什么。
day27。“壁纸是师弟拍的。实验室门口的柳树。”
第四遍开始,他只看最后三秒。从4分14秒逐帧拖。碎屏太小。亮度拉到最高。色温拉到最暖。
4分14秒。师兄的头微微偏了。从正对镜头偏到稍微向右。
4分15秒。嘴角动了。
4分16秒。嘴唇分开。合拢。再分开。
4分17秒。黑屏。
灰毛衣拖回4分15秒。逐帧截图。排成一列。一帧一帧看。
看了十四遍。
画质太差。嘴唇轮廓和像素噪点混在一起。有三种可能的口型。
两个字。三个字。四个字。
他把看守者日誌最后一条调出来。
“酸菜。”
不是师兄在想吃的。是师兄在说话。
4分15秒开始的口型——第一个字,舌尖抵上顎后弹开,“suan”。第二个字,开口度小,送气,“cai”。
但嘴唇在“cai”之后没有闭合。
还有。
4分16秒。嘴唇重新分开。张合一词。口型比前两个字小。紧凑。
灰毛衣把day7的日誌调出来。“酸菜面调料包太咸。”
师兄在最后一刻说的不是“酸菜”。
是“酸菜面”。
最后那个“面”——唇形从“m”的闭合到“ian”的展开——和第三种口型完全吻合。
三个字。
酸菜面。
不是遗言。不是告別。不是什么“替我好好活”。
是一个快死的人,看著以后会打开这段视频的人,对他说——
酸菜面。
想吃。
---
灰毛衣把手机扣在地上。屏幕朝下。
坐著。
保温杯在右手边。拧开盖。晃了一下。水声。还有一点。倒进嘴里。
没有水。
几颗枸杞。泡了不知道多久。全烂了。软塌塌滑进嘴里。
他嚼了嚼。
咸的。
不是枸杞的味道。
又嚼了两下。咽了。
手机碎屏朝下扣著。背壳朝上。上面贴著一张哑光贴纸,师兄从校门口一块钱三张的摊上买的。一只柴犬。歪眼。
师兄说像他。他说不像。师兄说一模一样,你生气的时候尤其像。
贴纸角翘了。灰毛衣用拇指按回去。按了两遍。粘不住了。胶老化了。
他从口袋里掏出一截透明胶——不知道什么时候揣进去的——撕了一小条,把贴纸四个角贴好。
贴完了。
他把手机翻回来。打开文件属性。
视频元数据。標准栏位。创建时间。修改时间。解析度。帧率。
往下拉。
gps栏位:空。正常。零號区没有gps。
备註栏位。有內容。
灰毛衣点开。
一组数字。纯数字。十八位。
前六位——年。月。日。
后十二位是精度补偿。到毫秒。
时间坐標。指向未来。
备註最后一行,用竖线隔开,跟著一句话。师兄写代码注释的习惯——双斜槓加空格。
// 这个时候去看看。应该能看见好东西。
灰毛衣把十八位数字逐位抄在手腕上。用指甲刻的。没有笔。
刻完了。手腕上一串红印。和旁边黑屏手錶並排。
手錶黑著。师兄的字没了。
红印在。
他拧好保温杯盖子。空的。枸杞也吃完了。
站起来。碎石在鞋底磕了一下。
操作台上键盘的回车键,油漆脱落的那块灰色,在零號区残余光线里泛著一点哑光。
灰毛衣走过去。弯腰。从操作台底下拿起地上那部手机。
师兄的。
屏幕碎了。比他的碎得更彻底。但亮著。壁纸是一棵柳树。实验室门口。
他拍的。
他把师兄的手机装进左边口袋。自己的装右边。
两部碎屏手机。一左一右。
走了。
---
灭了的屏幕上什么都没有。看守者走了。师兄的字消了。零號区安安静静。
只有操作台上那个回车键的灰色底座,在黑暗里,保持著一根手指按下去又鬆开的弧度。
四十七天。每天按几百次。
磨出来的形状。
没人会再按了。
但形状在。
刚好是一根小指的宽度。
---
许默的七號屏弹出一条数据。
视频元数据中的时间坐標,被李斯自动抓取,与空白区域衰减模型交叉比对。
结果跑了0.8秒。
时间坐標指向的那个点——和空白区域厚度预计归零的时刻,偏差在±41秒以內。
师兄在四十七天前算出了一个连李斯都需要跑模型才能得出的数字。
用30%的脑子。
许默没建文件夹。
他把这条数据直接写在操作台表面。用指甲。和灰毛衣刻在手腕上的方式一样。
一串数字。
刻完了。看了三秒。拿抹布擦掉了。
心里记著就行。