江寒用Python設計了一個程序,將“彈性碰撞”算法實現了出來。
所謂“彈性碰撞”,通俗的說法就是“碰瓷兒”。
首先準備一個種子函數,然后讓算法隨機修改函數的參數和結構,衍生出各種各樣的函數。
在極其罕見的情況下,有的函數可能與81個核心方程中的某一個,在某些特征上表現出足夠的相似度。
當搜索到了這樣的函數,就將其替換到“蘋果核”上去。
眾所周知,兩個同階微分方程,如果結構、系數等方面,并不完全相同,那么通常來說,就是兩個完全不同的方程,理論上來說,是不能互相替換的。
但在計算機中,有的時候這樣做卻是可行的。
這是因為,任何計算機的精度都是有限的,只能近似地體現出方程或函數的部分特征,而非全部。
所以,如果兩個函數或方程,在某些方面可以重合,尤其是上下文中需要體現的那部分特征,只要沒有出現任何出入,那么就可以在計算機內部,將兩者等同看待。
當然,單靠人力計算,想要進行這樣的碰瓷兒,幾乎是不可能的。
但現在嘛……
有了“彈性碰撞”算法,就為機器求解提供了實施的途徑。
相比于窮舉法,“彈性碰撞”的優點是可以節省大量時間,缺點就是可能存在漏解。
而且,這是一種碰運氣的算法,可能一秒鐘就能找到答案,也可能一輩子都找不到。
那么,如何提高碰瓷成功的概率,縮短等待的時間呢?
答案很簡單,可以采用并行計算。
好吧,說實話,這個時候,江寒就深刻地認識到量子計算機的優越性了。
而在只有經典計算機的當下,解決這種大規模計算,只能靠人多力量大……
江寒將“彈性碰撞”程序上傳到了自己布置在車庫中的IBM服務器和五臺工作站中,讓它們同步運行了起來。
隨后,他就拿出一本《密碼學算法》,看了起來。
每隔大約1個小時,江寒就通過筆記本電腦,遠程檢查一下服務器和各個工作站,看看“彈性碰撞”的運行情況。
事實證明,他今天的運氣還真不錯。
僅僅在第3次例行巡查中,江寒就欣喜地發現,居然有三臺工作站,找到了可用數據。
碰瓷成功!
接下來,就比較簡單了。
將這3條數據中的任意一條,替換到“蘋果核”上去,都會讓原本完美無瑕的壞蘋果,產生一條細微的裂隙。
如果將3條數據全部換上去……
江寒這樣做完之后,欣賞著遍體鱗傷的“蘋果核”,不禁滿意地一笑。
隨后他就開始抽絲剝繭,手工拆解“蘋果核”。
這個過程異常繁瑣,持續了足足10個小時。
晚上8點左右,夏如虹回來了。
江寒就捧著筆記本,回到了自己的房間,然后繼續操作。
直到天色蒙蒙亮,他才終于將蘋果核中,那些冗余的方程和參數,全部手工合并、排除掉。
現在只剩下了一條高階微分方程,只是經過多次變形,看起來已經十分丑陋,且臃腫不堪……
接下來,就是設計一個窮舉算法,為這個方程求出一組近似解,再以這組數值解為核心,打造出一把“削皮刀”,給“壞蘋果”脫殼……
凌晨5點,被徹底洗白白,煥然一新的“壞蘋果”,終于再次出現在了江寒的眼前。
先將其寫入壞蘋果基板,試著運行了一下。
結果十分令人欣喜,程序運行完全正常。
這說明在脫殼的過程中,原始數據并沒有任何損壞。
接下來,江寒又用Python編寫了一個小工具,對比了一下脫殼前后的ROM。
對比結果顯示,加密后再次洗白的“壞蘋果”,比原始文件多出了大約11%的垃圾數據。
江寒看到這個結果,忍不住嘆了口氣。
數據終究還是被污染了一點點。
這說明自己的解密步驟,并沒有臻至十全十美,仍有可優化的地方。
不過,這些垃圾數據雖然沒什么用處,但一般來說,也不會產生任何危害。
就算放著不管,也完全沒關系。
接下來,江寒再次登錄了KAGGLE官網,進入錦標賽頁面,將煥然一新的壞蘋果傳了上去。
一切搞定,已經凌晨6點多,江寒洗了把臉,直接下樓。