第200章 四百行壓成十七行,每一行都不能浪費

投票推薦 加入書籤 小說報錯

  壓縮包圖標卡在碎屏裂縫裡。

  灰毛衣盯著它看了十二秒。不是猶豫。是在等手穩。

  保溫杯剛放下,右手指尖還有零點幾毫米的振幅。枸杞水涼透了,杯壁和指尖差不多溫度,分不清是杯子涼還是手涼。

  他點了解壓。

  進度條跑得快。手機內存不夠,卡了兩次。第二次彈出提示——「存儲空間不足,建議清理大文件」。

  灰毛衣把相冊里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%的腦子。

  許默沒建文件夾。

  他把這條數據直接寫在操作台表面。用指甲。和灰毛衣刻在手腕上的方式一樣。

  一串數字。

  刻完了。看了三秒。拿抹布擦掉了。

  心裡記著就行。

章節目錄