本帖最后由 obey123 于 2017-5-4 00:36 编辑
21
「妳們在電話裡提到的字條跟書,都讓我看一下吧。」
走進西木野總公司內為了這次作戰所特別空出來的會議室,絢瀨繪里隨手將身上那件立領皮衣掛在椅背上,拉開矢澤妮可右邊的位置入座。
伸手接過西木野真姬朝自己遞來的兩樣物品,她抬頭發現那雙藤紫色眼眸正直直盯著自己看。
「嗯……?」
「東條警部的狀況,如何了?」指尖繞著赤紅髮端,皺眉詢問。
「已經清醒了哦。」
「什麼?醒過來了嗎!」這一次換成黑髮駭客激動得不顧音量。
「嗯,兩個多小時前。身體也沒有大礙,估計晚點檢查完就能出院了吧?」
看見她的赤眼友人因此鬆了口氣,絢瀨繪里淺淺一笑,接著將注意力放回面前的『金鑰』上方。
――現在,這邊才是當務之急呢。
不久前終於向某位因孽緣結識、最終萌生了情感的紫髮警部坦承心意,對方卻沒有接受也沒有拒絕。只是對自己神秘一笑後表示「等一切落幕,咱再給妳答案吧」,便將話題帶回這次的行動之上。
回想到這邊,絢瀨繪里忍不住嘆息,拿起眼前那一張名片尺寸的紙條,單手撐著下巴。
――正如希所說,等事情結束再來聽聽她的答覆吧。
《復活》這本書,做為俄國經典小說之一,生長在黑手黨家族、被施以菁英教育的絢瀨繪里自然從小便被迫熟讀。即使到了現在,也還記得絕大多數內容。
指尖捏著字條右下角空白處,她用與生俱來的乾冷無機質嗓音,複誦紙面上以鋼筆寫的短短一行字:
「p.s. 請容我在上帝面前向你贖罪……嗎?」
左手托住下巴,接著陷入了長考。
「從剛才在電話裡談及的內容來看,妳們認為這份二進位編碼涉案名單,是用『異或密碼』進行加密的。而這一本《復活》,便是用來將原文還原用的『金鑰』,沒有錯吧?」
「嗯。」赤眼駭客簡潔回應。
「也就是,現在要找出《復活》這本書中,究竟是哪一段內容被拿來做為這次的『金鑰』。再將這段內容同樣轉換為二進位編碼,並透過與密文進行異或運算,還原原本名單?我這樣理解,是正確的嗎?」
「哼,沒想到妳竟然對這方面的事情還算了解?」望著身旁的天藍,赤眼駭客挑眉,第一次對她感到欽佩,「完全正解。」
從黑髮女子那邊得到肯定的答案,絢瀨繪里開始翻閱起眼前那本精裝小說。彷彿早已大略知道位置,她很快地停在某一頁,細讀了起來。
整個過程前後並未花超過十分鐘,旁邊兩人便看見那雙空色眼眸又再次抬了起來、虹膜底部映著自信直視她們。
「既然如此……」
將書本攤開在某一頁,天藍同時把紙條轉了過去,確保另外兩人也能看見上面的文字。
掛著淺笑,緩緩啟口。
「《復活》這本書,內容描述一名俄國貴族聶黑流道夫對姑媽家的養女兼女僕卡秋莎產生感情,進而於復活節那晚誘姦並使她懷上身孕、被逐出家門、從此淪為妓女。當年拋棄她的聶黑流道夫卻於多年後偶然做為陪審員在法庭上巧遇了被誣告為殺人犯的卡秋莎,發現當時的行為造成了她一生的不幸、自己卻完全不必受罰。良知未泯的他從此被罪惡感纏繞、十分懺悔,進而踏上贖罪之路。最後聶黑流道夫終於有了精神上的轉變、開始他道德的復活與個人的新生。整本小說粗略概括,大概就是這樣一則故事。」
「原來如此。然後呢?那句『請容我在上帝面前向你贖罪』又是在暗示什麼?」
挑眉,黑髮駭客提出直搗核心的疑問。
「托爾斯泰在最後,是讓聶赫發現一名受苦受難的年輕人終於死在監獄裡,進而引發他思考『受苦是為什麼?活著又是為什麼?』的問題,並焦急的想要尋求答案而徹夜閱讀新約聖經。最後他終於想通――『要克服使人飽受苦難的罪惡,唯一可靠的辦法,就是在上帝面前承認自己的罪過』。」
說到這裡,絢瀨繪里的嘴邊牽起一彎淺弧。
她看見另外兩人瞬間領悟到什麼的表情。
—Так выяснилась ему теперь мысль о том, что единственное и несомненное средство спасения от того ужасного зла, от которого страдают люди, состояло только в том, чтобы люди признавали себя всегда виноватыми перед богом и потому не способными ни наказывать, ни исправлять других людей. —流利地唸完這串俄文句子,絢瀨繪里稍微停頓一下,又再次切換回日語:「……於是現在他才明白,要將人從使其飽受折磨的罪惡中拯救出來,唯一可靠的辦法,便是時常在上帝面前承認自己是有罪的,因此既不該懲罰別人,也無法糾正別人。」
「妳是指,那一句話,就是在暗示這一行嗎?」黑髮駭客挑眉。
「如果由我來猜測的話,是的,但我也不能保證自己絕對正確。況且這樣解,並沒有考慮到前面那看似多餘的『p.s.』。或許這部分還有藏有其他玄機也說不定?」
「那麼,剛才提到的那一串內文,又是在《復活》裡面哪一頁?」夾雜鼻音的聲線在耳邊響起。
「第三部第二十八章,也就是全本小說的最後一個章節……這裡。」
指尖輕點在泛黃而略為粗糙的紙面上,在那行句子上輕劃而過。
她看見另外兩人跟著若有所思了起來。
「總之,妮可就先試試看這個解法,如果行不通再修正吧?」
簡單告知完,她便將注意力轉回面前那台電腦,開啟剛從網路上抓下來的《復活》全文。妮可對照著書本內繪里剛才指出的句子,複製了從那一行起的整段文字並存成txt檔。
基本上,只要先嘗試一個段落,再觀看解出來的內容是否合理,就能判斷這種解讀正不正確。剛開始並沒有必要一次把後面的所有內容全都貼進來。
「妳打算用哪種文字編碼, KOI8-R、Windows-1251、Unicode,還是……?」在一旁看著黑髮駭客進行操作的燦金提出了疑問。
另一方面,並沒有想到會被詢問如此深入問題的妮可,揚起眉略感興趣的看向對方。
「先以Unicode為主吧,UTF-16行不通就試UTF-8。除非刻意選擇比較冷僻的編碼,不然這應該是最適合的。」
「了解。」
「……就麻煩妳了,妮可醬。」專業並不在這領域的赤紅,邊繞著髮梢輕靠向了椅背。
「那當然。」
使用不久前才寫好的程式載入這份含有小說內文的 txt 檔,再以 UTF-16 編碼系統將其輸出為 2 進位制的 0 與 1。執行程式後花不上多少時間,資料夾內便立刻多出一份轉換後的檔案。
「剛剛做的轉換……舉例來說,那句話第一個是大寫的西里爾字母『Т』,轉換成UTF-16 後,便是『U+0422』。」
認為自家戀人大概不太明白正在進行的解碼步驟,為了讓她參與到其中步驟,黑髮駭客自顧自的說明起來。
「接下來再將16進制的『U+0422』轉換為 2 進位制,便是『0000010000100010』。這部分真姬醬應該也能理解?」
「原來如此。0422裡面的0轉換成0000、4轉換成0100、2則是0010,沒錯吧?」
「是的。所以現在我們有了『加密後的檔案』,也就是那份涉案名單、也有了『金鑰』,也就是這份把小說內文轉換成 0 與 1 後的文字檔。只要再用金鑰對加密檔進行一次異或運算(XOR),理論上,如果沒有把哪裡弄錯的話,就可以得到『原文』。」
開啟另一支同樣事先寫好的程式,載入剛才由小說內文被輸出為 2 進位制的那份 01 構成的 txt 檔,讓其自動與加密過的涉案名單進行「異或運算」。
黑髮駭客抬頭,再次對旁人進行說明。
畢竟,還是需要大致理解解碼步驟,如果出錯的話才容易一起找出問題點。
「現在進行的運算,打個比方來說,這份涉案名單的前十六位數字分別為『0000010001111001』,而我們剛才由內文轉換來的二進位編碼內前十六位則是『0000010000100010』。進行異或運算時,當兩者相同則輸出 0、兩者相異則輸出 1,也就是――0 與 0 輸出 0,0 與 1 輸出 1, 1 與 0 輸出 1, 1 與 1 則輸出 0。因此,兩者進行完異或運算,就變成了『0000000001011011』。只要再將其轉回 UTF-16 編碼『U+005B』,換成字元後就是……『[』。」
講到這裡,妮可皺起眉,點開那份解碼完成的檔案後,發現果不其然是一整面的亂碼。迅速嘗試其他幾種編碼方式來轉換俄文,然而全都一樣毫無邏輯可言。
看來,不好好把 p.s. 的意思弄清楚,是解不開這份名單的呢。
「果然行不通,還是一步一步進行吧?」看見螢幕上的結果,天藍再次拿起字條,緊緊盯著、彷彿要將它貫穿一樣,「問題似乎就是出在這個 p.s. 呢……它應該,也是具有意義的文字。」
「嗯。如果代表著 postscript 的話,意思是要我們找出這封『信件』的正文?」妮可皺眉。
「吶、仔細一看,不覺得這個 s 的寫法,看起來有點不自然嗎?」紅髮女子打斷她們的對話,「一般來說轉彎處繞個弧就好,然而這個 s 的弧看起來卻有微小稜角。就像是……刻意把阿拉伯數字『5』寫得很像『s』一樣。」
「欸?」被提醒後也注意到這個疑點的駭客跟著瞪大了眼,「這麼一看,『p.s.』裡的第二個『.』也與前面那個有著微妙的不同呢。原本想說只是手書比較不嚴謹而已,看來,或許其實是在誤導我們也說不定?」
「真要說是誤導,我覺得也不盡然。畢竟,那位不知名人士特意夾了一張紙條進去……如果目的只是單純要讓我們成功解碼,直接把流程全寫出來不是更省力嗎?刻意這麼做,或許有其背後的特殊意義存在,然而那一層意義不見得與解碼有關。所以……」頓了頓,燦金將話題再次拉了回來,「意思是,這行文字並非『p.s. 請容我在上帝面前向你贖罪』,而是『p.5, 請容我在上帝面前向你贖罪』囉?如果沒有理解錯誤的話,應該是在代指『page 5』才對。矢澤桑,能夠麻煩妳將這本《復活》第五頁的內容與名單進行異或運算試試嗎?從 девочка 這個字開始。」
「不用妳提醒,正在做了。」
手指飛快敲打著鍵盤及滑鼠,矢澤妮可迅速地將整個解碼流程從頭跑過一遍。
完成後,檢視輸出為文字檔的解碼內容,發現這下終於成為可以順利閱讀的文字。她用低沉本音復誦檔案內第一串人名,不屑地輕笑。
「Matsumoto Takeshi……松本武?沒記錯的話,似乎跟我們池袋警察署內的某一位課長同名同姓呢?」饒富趣味的瞇起眼,對於成果很是滿意,「這麼一來,就能還原整份文件了。」
「看來是順利趕上晚點的『會面』了呢,妮可醬。」
「小事一樁。」
沒有抬頭,而是繼續將書本中第五頁的全部內容,以及第三部第二十八章那一句「在上帝面前承認自己有罪」以下一直到結局的內文全複製出來,存成txt檔。接著用程式載入文件,與加密過的那份名單進行異或密碼的解碼運算。
然而,起初順利的流程卻在進行到中後段部份時,出現了錯誤信息。
皺起眉,她困惑的檢查起究竟是哪裡出問題。
「欸……?金鑰長度不足?要解完整份文件,我們似乎還缺少一大段內文,光是現在的量並不足以完全匹配整份涉案名單。」
「意思是,還有被遺漏的線索?」繪里發問。
「正是如此。」
「唔嗯……」
三人再次陷入短暫沉默。
各自奮力回想著,究竟又是哪個環節被疏忽了。
「這下,又必須繼續從這張字條與這本《復活》內找線索了呢。」
「等等……《復活》?」突然打破寂靜,金髮老大重述著書籍標題,宛如靈光乍現般瞬間勾起一抹淺笑,「這麼說來,或許書名本身就是一種提示也說不定?」
「哦?怎麼說?」單邊托住下巴,藤紫含笑凝視空藍。
「在故事最後,聶黑流道夫終於得以透過正視自己錯誤與罪孽而使負罪靈魂真正『復活』。但現在我們不談道理,單純就字面上來看,若是解碼用的這本小說走到了結局卻被『復活』,妳認為又會回到哪裡呢?」
「哼……妳是想表達,在小說結局後要接回第一頁之類的嗎?」
「我覺得值得一試。」
聳了聳肩,認為這假設還算合理的黑髮女子微微點頭以示認同,同時開始手邊的解碼動作。
等待程式運轉期間,她再次拾起今天的第七包草莓牛奶。偏頭思考一下又覺得好像並不妥當,轉而拿起桌上某支由紅髮戀人帶來的番茄口味棒棒糖,拆封放入口中。
黑髮女子總認為哪裡不太對勁的皺起了眉。
嗯……以後絕對要叫她買草莓牛奶口味。
「貌似完成了哦?」
突然聽見某個不久前仍相當刺耳的乾冷嗓音提醒自己,矢澤妮可挪動疲憊身軀從靠著的椅背坐直,深呼出一口氣。
連續將近二十小時的高難度作業早已漸漸將她的精神與集中力蠶食殆盡。然而在分內工作結束之前,她清楚自己並不能夠休息。
對於像這次一樣重視速戰速決的任務中,每一分每一秒都格外重要。沒有絲毫浪費空間。
呼。
闔上眼,又緩緩睜開那雙銳利的赤瞳,頂尖駭客終於動手點開那份剛解完碼的文件檔。
――所有涉案人員的名子、職位、銀行帳戶、金錢流通資訊等等,都完美的列在上方。包含某位紫髮警部,也自然沒被遺漏。
「……總算是成功了呢。」
三人彼此對視,懸在半空中的心情終於鬆了口氣。
黑髮女子則全身脫力倒回椅背上,雙眼無神凝望著天花板。
「那麼,我就把這份名單印下來,為稍後行程開始做準備囉?」
「麻煩妳了。」燦金輕笑。
「路上小心,真姬醬。」
絢瀨繪里跟著靠向椅背,放空腦袋任思緒隨意在空中飄搖。
某種想法卻在此時悄悄纏繞上來。
――結果到頭來,依舊沒能明白……這張紙條究竟還含有什麼「特殊目的」。
------------------------------
大家好,為了關窗的底線很認真在更文(つд⊂)
然後感謝大家上次對於實體書的迴響 (???
基本上,台灣一定會有通販,
台灣以外就……我、我會努力研究看看怎麼用的(つд⊂)
如果行的通,再公告給大家 (?
然後就是關於本次的更新內容,我相信解碼部份……
雖然我盡量寫的好懂了(大概),可是對沒學過程式的人可能還是有點難理解
所以、就容我在這邊簡單說明一下吧 \(^o^)/
如果有興趣的人可以參考看看,如果看不懂……沒關係,只要覺得BiBi很帥就好^^
(讀者:我還以為我看的是戀愛同人,結果你讓我學文字編碼???)
首先,相信大家都知道,電腦在執行的時候其實只看的懂 0 跟 1。
而它之所以可以讀懂我們輸入的文字、符號等等,
其實是因為我們制定了一些規則,將各種文字、符號用 0 與 1 的組合表示。
寫程式的時候,”字元 (char)” 這種東西就會被轉換成編碼(0&1),再讓程式去處理。
打個最簡單的比方,就像是常看到的 ASCII code,
它是拉丁字母的電腦編碼系統。
最初學的時候應該都是用這個?
畢竟處理英文字&阿拉伯數字是最簡單也最基本的 XD
有興趣的人可以上網打 “ASCII table” 就可以看見是怎麼編的了\(^o^)/
然後本章解碼用的,因為涉及到俄羅斯文,
所以我是選擇用 Unicode 這種最通俗的編碼。
而在我介紹加解密流程之前,先讓我講解兩個觀念:
「異或運算」跟「16進制與2進制的差異」
第一個,也就是最好懂的,是「異或運算 (XOR)」。
它的規則只有一個――兩者相同輸出0,兩者相異輸出1。
換句話說,「0碰到0」跟「1碰到1」的時候,都輸出0;
而「0碰到1」或「1碰到0」時,則輸出1。
下面舉個小小的例子:
0011
1001
------------XOR
1010
最左邊那欄,因為是0跟1 (相異),所以輸出1;左二是0跟0 (相同),所以輸出 0;左三是1跟0所以輸出1 (相異);最右邊是1跟1 (相同) 所以輸出0。
第二個,是介紹怎麼轉換16進制跟2進制。
我覺得這個可能對初學者有點難懂,不過就盡量吧 (艸
拿本次更新裡有的內容來舉例,U+0422是怎麼轉換成“0000 0100 0010 0010”的呢?
首先,在轉換的時候我們可以無視前面的 “U+”,看後面的 “0422” 就好。
先看這個示意圖:
----------------------------------------------------------------
0 4 2 2 (16進制)
0000 0100 0010 0010 (2進制)
----------------------------------------------------------------
2進制裡面,xxxx由 「右而左」 分別代表著「2的零次方」、「2的一次方」、「2的二次方」、及「2的三次方」。
比方說,”4” 這個數字,就是「2的二次方」,所以是0”1”00,意思是「0*(2^3) + 1*(2^2) + 0*(2^1) + 0*(2^0)」
那如果今天數字是 “6” 呢?
就是「0*(2^3) + 1*(2^2) + 1*(2^1) + 0*(2^0)」
也就是 “0110”。
如果還是不懂的就……唔嗯,加油(つд⊂)
至於整個加密到解碼的整體邏輯,簡單來說就是:
1. 原文
把涉案名單 (英文=日文羅馬拼音 & 數字構成) 全部用 Unicode (UTF-16 = 16進制) 轉成 0 & 1 (=2進制) 的編碼。
Ex. “M” (原文) => “U+004D” (UTF-16) => “0000 0000 0100 1101”
2. 金鑰
金鑰就是由小說內容 (俄文) 轉成 0 & 1 編碼後的東西。
Ex. “д”(俄文) => “U+0434” (UTF-16) => “0000010000110100”
3. 加密
用金鑰對原文做一次「異或運算」(XOR)
Ex.
0000 0000 0100 1101 (原文) XOR 0000 0100 0011 0100 (金鑰)
=> “0000 0100 0111 1001 (密文)”
而 ” 0000 0100 0111 1001” 就是今天 SG 組拿到的涉案名單的樣子。
也就是說如果 SG 組想要從這串 0 & 1 還原成 “M” 這個文字,
她們就必需拿到金鑰 《復活》 才行。
如何還原成原文呢?
很簡單,就是拿「金鑰」再對「密文」做一次異或運算。
0000 0100 0111 1001 (密文) XOR 0000 0100 0011 0100 (金鑰)
=> “0000 0000 0100 1101” (原文)
有沒有發現!再把0000 0000 0100 1101轉換回 Unicode 就會變成 “M”,也就是原文了 \(^o^)/
這就是「異或密碼」的原理,其實很簡單 XD
然而這種密碼在「金鑰」長度與「原文」一樣時,
也就是沒有重復使用時,
基本上是不可能被破解的。
所以,總之,為了讓一切看起來很帥 (用書本做為鑰匙想想就覺得潮)
我就這麼設計解碼流程了www
(對,活像個理工死宅)
以上,是強迫症底線的冗長說明。
相信對工程背景的人應該很好懂,
工程以外就......嗚嗚QQ (?
(讀者:還以為是戀愛同人文呢,原來是程式教科書啊。) (幹