官术网_书友最值得收藏!

前言

如果讀者帶著本書(shū)穿越回到20世紀(jì)90年代,就會(huì)發(fā)現(xiàn)第23章關(guān)于RSA密碼的內(nèi)容在當(dāng)時(shí)的美國(guó)是不允許出口的。由于RSA密碼加密過(guò)的信息不可能被破解,因此美國(guó)政府將出口類(lèi)似RSA的加密軟件視作與美國(guó)國(guó)家安全相關(guān)的問(wèn)題,需要由美國(guó)國(guó)務(wù)院提供許可。事實(shí)上,法律對(duì)高強(qiáng)度的密碼算法甚至有著和坦克、導(dǎo)彈、火焰噴射器一樣嚴(yán)格的限定。

1990年,加利福尼亞大學(xué)的一名學(xué)生Daniel J. Bernstein想要發(fā)表一篇關(guān)于Snuffle加密系統(tǒng)源代碼的學(xué)術(shù)論文。美國(guó)政府告知他,如果想要將代碼發(fā)表在互聯(lián)網(wǎng)上,就必須先得到一張軍火商的許可證。同時(shí),美國(guó)政府還告訴他,因?yàn)樗募夹g(shù)安全等級(jí)太高,所以如果他要申請(qǐng)一張軍火許可證的話,政府就不得不吊銷(xiāo)他的出境護(hù)照。

電子前線基金會(huì)(EFF)是一個(gè)十分年輕的數(shù)字公民自由組織,在Bernstein起訴美國(guó)政府的時(shí)候,它與Bernstein站在了同一陣線。這是有史以來(lái)第一次,法庭判決一份軟件代碼受到憲法第一修正案的保護(hù),且對(duì)該加密軟件的出境控制觸犯了Bernstein的法定人權(quán)。

現(xiàn)在,每天都有成千上萬(wàn)的互聯(lián)網(wǎng)商人使用強(qiáng)大的密碼算法。這些密碼算法已然成為全球經(jīng)濟(jì)、商業(yè)安全保障和電子商務(wù)站點(diǎn)的基石。情報(bào)機(jī)構(gòu)曾經(jīng)預(yù)測(cè)加密軟件將會(huì)毀滅國(guó)家安全機(jī)制的駭人言論早已失去蹤影。

本書(shū)的目標(biāo)讀者

許多圖書(shū)指導(dǎo)初學(xué)者如何運(yùn)用密碼算法寫(xiě)出密文以及破解密碼算法,但目前幾乎沒(méi)有一本書(shū)教授初學(xué)者如何用計(jì)算機(jī)編程實(shí)現(xiàn)密碼算法的破解,本書(shū)填補(bǔ)了這一空白。

本書(shū)是為對(duì)加密、破解或密碼算法抱有濃厚興趣的人士準(zhǔn)備的。除第23章和第24章介紹的公鑰密碼算法以外,本書(shū)其余的密碼算法均有超過(guò)一個(gè)世紀(jì)的歷史,但目前的筆記本電腦有破解它們的計(jì)算能力。現(xiàn)在已經(jīng)很少有組織或個(gè)人會(huì)使用這些密碼算法了,但通過(guò)學(xué)習(xí)這些算法,讀者能夠了解密碼算法建立的基礎(chǔ),也能了解黑客破解弱密碼算法的方式。

注意

本書(shū)介紹的密碼算法都非常有趣,但它們實(shí)際上并不安全。切記不能使用本書(shū)中的任何加密程序去加密真實(shí)的文件。還有一個(gè)普遍的定理是,不要信任任何你自己創(chuàng)造出來(lái)的密碼算法。真實(shí)世界中的密碼算法是經(jīng)過(guò)密碼學(xué)家多年的專(zhuān)業(yè)分析及設(shè)計(jì)之后才投入使用的。

本書(shū)也是為從未學(xué)習(xí)過(guò)編程的讀者準(zhǔn)備的。它將以Python語(yǔ)言傳達(dá)基礎(chǔ)的編程理念。對(duì)于新手來(lái)說(shuō),Python是一門(mén)優(yōu)秀的編程語(yǔ)言,擁有平緩的學(xué)習(xí)曲線,各年齡段的初學(xué)者均可以掌握,而它同時(shí)也是一種用于專(zhuān)業(yè)軟件開(kāi)發(fā)的強(qiáng)大語(yǔ)言。Python程序可以運(yùn)行在Windows、macOS、Linux系統(tǒng),甚至樹(shù)莓派,下載和使用Python程序都是完全免費(fèi)的。

在本書(shū)中,作者將頻繁用到“黑客”這一術(shù)語(yǔ)。“黑客”這個(gè)詞語(yǔ)有兩種定義,它可能指某個(gè)研究密碼系統(tǒng)(如密碼算法的原理或軟件代碼的片段)的人,這個(gè)人精通整個(gè)系統(tǒng),以致他不會(huì)受到系統(tǒng)原則的限制,甚至可以創(chuàng)造性地對(duì)系統(tǒng)進(jìn)行修改;這個(gè)詞也可能是指闖入計(jì)算機(jī)系統(tǒng)的不法分子,他們會(huì)侵犯人們的隱私,造成各類(lèi)損失。本書(shū)采用的是第一種釋義。黑客是很“酷”的,而犯罪分子不過(guò)是一些認(rèn)為搞破壞就能顯得自己高人一等的家伙罷了。

本書(shū)涵蓋的內(nèi)容

第1~3章將介紹Python和密碼學(xué)的基本概念。第4~24章則依次解釋某種密碼算法的加密程序與其對(duì)應(yīng)的破解程序。每章配備習(xí)題,有助于讀者復(fù)習(xí)所學(xué)到的知識(shí)。

?第1章:制作紙質(zhì)密碼學(xué)工具,包含了一些簡(jiǎn)單的書(shū)面工具的介紹,展示了在計(jì)算機(jī)出現(xiàn)之前加密是如何實(shí)現(xiàn)的。

?第2章:在交互式運(yùn)行環(huán)境中編程,說(shuō)明了如何使用Python交互式運(yùn)行環(huán)境逐行執(zhí)行代碼。

?第3章:字符串及編寫(xiě)程序,包含了編寫(xiě)完整代碼的教程和本書(shū)中所有程序都會(huì)用到的字符串?dāng)?shù)據(jù)類(lèi)型的簡(jiǎn)介。

?第4章:反向密碼,介紹了第一種密碼算法的簡(jiǎn)單程序編寫(xiě)方法。

?第5章:凱撒密碼,包含了一種數(shù)千年前發(fā)明的基礎(chǔ)密碼。

?第6章:用暴力算法破解凱撒密碼,介紹了暴力破解算法及如何在沒(méi)有密鑰的情況下使用暴力破解算法解密信息。

?第7章:通過(guò)置換密碼實(shí)現(xiàn)加密,介紹了置換密碼及置換密碼加密程序。

?第8章:解密置換密碼,包含了置換密碼的第二部分,即通過(guò)密鑰解密消息。

?第9章:編寫(xiě)測(cè)試程序,介紹了通過(guò)一個(gè)程序測(cè)試另一個(gè)程序的技術(shù)。

?第 10 章:文件的加密與解密,介紹了如何從硬盤(pán)中讀出文件以及如何將文件寫(xiě)入硬盤(pán)。

?第11章:編程檢測(cè)英語(yǔ)文本,描述了計(jì)算機(jī)檢測(cè)英文句子的方法。

?第12章:破解置換密碼,結(jié)合之前章節(jié)的內(nèi)容,破解置換密碼。

?第13章:仿射密碼的模運(yùn)算模塊,解釋仿射密碼的數(shù)學(xué)原理。

?第14章:編寫(xiě)仿射密碼,包含了仿射密碼實(shí)現(xiàn)程序的編寫(xiě)過(guò)程。

?第15章:破解仿射密碼,解釋了如何編寫(xiě)程序破解仿射密碼。

?第16章:編寫(xiě)簡(jiǎn)單代換密碼,包含了代換密碼實(shí)現(xiàn)程序的編寫(xiě)過(guò)程。

?第17章:破解簡(jiǎn)單代換密碼,解釋了如何編寫(xiě)程序破解代換密碼。

?第18章:編寫(xiě)維吉尼亞密碼,介紹了維吉尼亞密碼的實(shí)現(xiàn)程序。該密碼是一種更為復(fù)雜的代換密碼。

?第19章:頻率分析,對(duì)英文單詞的結(jié)構(gòu)進(jìn)行了探究,并據(jù)此說(shuō)明如何利用其結(jié)構(gòu)破解維吉尼亞密碼。

?第20章:破解維吉尼亞密碼,解釋了如何通過(guò)編寫(xiě)程序破解維吉尼亞密碼密碼。

?第21章:一次一密,介紹了一次一密密碼并從數(shù)學(xué)角度分析其無(wú)法被破解的原因。

?第22章:素?cái)?shù)的查找與生成,介紹了如何編寫(xiě)一個(gè)用于快速判斷素?cái)?shù)的程序。

?第23章:為公鑰密碼生成密鑰,描述了公鑰密碼原理及生成公私鑰對(duì)的程序。

?第24章:編寫(xiě)公鑰密碼算法,說(shuō)明了公鑰密碼加密程序,其生成的密文無(wú)法僅用一臺(tái)便攜式計(jì)算機(jī)破解。

?附錄:調(diào)試Python代碼,向讀者展示了如何通過(guò)IDLE的調(diào)試器找到并修復(fù)程序中的錯(cuò)誤。

如何使用本書(shū)

本書(shū)與其他編程類(lèi)圖書(shū)的不同之處在于,它的重點(diǎn)在于講解一段完整的源代碼。本書(shū)會(huì)向讀者展示完整的程序并解釋其工作原理,而不是僅告訴讀者編程的原理,然后讓讀者自己去研究如何編寫(xiě)一個(gè)程序。

輸入源代碼

在閱讀本書(shū)的過(guò)程中,建議讀者手動(dòng)將本書(shū)中的代碼輸入Python文件中。這樣做有助于讀者更好地理解代碼。

在輸入源代碼時(shí),注意不要將每行開(kāi)頭的行號(hào)一起輸入。這些數(shù)字并不是代碼的一部分,只不過(guò)是在解釋代碼的過(guò)程中可能會(huì)提到具體的某一行代碼,因此使用了行號(hào)。當(dāng)然,除需要注意行號(hào)的問(wèn)題以外,還必須確保輸入的代碼和書(shū)中完全一致,包括大小寫(xiě)形式。

讀者可能會(huì)注意到,某些代碼并不是從最左側(cè)開(kāi)始書(shū)寫(xiě)的,它的前面有4格、8格甚至更多的縮進(jìn)。請(qǐng)確保輸入正確的空格數(shù),避免出錯(cuò)。

檢查拼寫(xiě)錯(cuò)誤

雖然手動(dòng)輸入程序的源代碼對(duì)學(xué)習(xí)Python有很大幫助,但這個(gè)過(guò)程可能會(huì)偶爾出現(xiàn)拼寫(xiě)錯(cuò)誤,導(dǎo)致程序報(bào)錯(cuò)。要檢查出拼寫(xiě)錯(cuò)誤可能十分困難,尤其是在源代碼非常長(zhǎng)的情況下。

本書(shū)的編程規(guī)范

本書(shū)并不是一本編程參考書(shū),而是一本為初學(xué)者設(shè)計(jì)的實(shí)踐指南。因此,本書(shū)中的代碼有時(shí)候并未與最佳代碼樣式相符,但對(duì)本書(shū)而言,讓代碼學(xué)習(xí)起來(lái)更容易才是明智的選擇。同時(shí),本書(shū)并不會(huì)對(duì)計(jì)算機(jī)科學(xué)的理論做任何介紹。

老練的程序員可能會(huì)指出,本書(shū)的部分代碼可以改進(jìn)得更有效率一些,但本書(shū)最關(guān)心的問(wèn)題不是代碼執(zhí)行的效率,而是以簡(jiǎn)單的方式讓程序能夠執(zhí)行。

下載并安裝Python

在開(kāi)始編程之前,讀者首先要安裝Python編譯器(Python Interpreter),即一種用于執(zhí)行Python指令的軟件。以下將Python編譯器簡(jiǎn)稱為Python。

讀者可從Python官網(wǎng)上免費(fèi)下載Windows、macOS、Ubuntu版本的Python。只要下載最新版本,本書(shū)中的所有程序就能夠正常運(yùn)行。

注意

讀者需要確保下載的版本是Python 3系列(如Python 3.6)。本書(shū)中的程序是在Python 3上運(yùn)行的,在Python 2上可能無(wú)法正常運(yùn)行。

Windows版本安裝指南

在Windows上,首先下載Python安裝包,該安裝包的文件名應(yīng)該以 .msi結(jié)尾,雙擊這個(gè)安裝包,然后按照安裝程序在屏幕上顯示的指南安裝Python。

(1)選擇Install Now開(kāi)始安裝。

(2)安裝完成后,單擊Close按鈕。

macOS版本安裝指南

在macOS上,首先下載符合當(dāng)前macOS版本的.dmg文件并雙擊,然后按照安裝程序在屏幕上顯示的指南安裝Python,如下所示。

(1)當(dāng)DMG包打開(kāi)新窗口時(shí),雙擊Python.mpkg文件。這個(gè)過(guò)程可能要輸入計(jì)算機(jī)的管理員密碼。

(2)單擊歡迎界面上的Continue按鈕并單擊Agree按鈕接受相關(guān)條款。

(3)選擇HD Macintosh(或讀者硬盤(pán)的名稱)并單擊Install按鈕。

Ubuntu版本安裝指南

如果當(dāng)前系統(tǒng)是Ubuntu,那么可以按照以下步驟從Ubuntu軟件中心安裝Python。

(1)打開(kāi)Ubuntu軟件中心。

(2)在窗口右上角的搜索欄中輸入Python。

(3)選擇IDLE(Python 3.6版本),或其他最新版本。

(4)單擊Install按鈕。

在完成安裝的過(guò)程中,可能要輸入管理員密碼。

下載pyperclip.py

本書(shū)中的程序用到了一個(gè)作者編寫(xiě)的通用模塊:pyperclip.py。這個(gè)模塊可以讓程序復(fù)制并粘貼文本到剪貼板中。

該文件的位置必須和讀者編寫(xiě)的Python文件在同一文件夾(或稱同一路徑)中,否則運(yùn)行程序時(shí)會(huì)出現(xiàn)如下報(bào)錯(cuò)信息。

ImportError: No module named pyperclip

下載并安裝完P(guān)ython編譯器及pyperclip.py模塊之后,接下來(lái)看一看編寫(xiě)程序的工具。

啟動(dòng)IDLE

Python編譯器即為能夠執(zhí)行Python程序的軟件,而交互式開(kāi)發(fā)環(huán)境(Interactive Development Environment,IDLE)就是編寫(xiě)程序的地方,它更像是一個(gè)文字處理器。IDLE在安裝Python的同時(shí)就一并被安裝好了,可以通過(guò)以下步驟啟動(dòng)IDLE。

?在Windows 7或更新版本的系統(tǒng)中,單擊屏幕左下角的開(kāi)始按鈕,在搜索欄中輸入IDLE,并選擇IDLE(Python 3.6 64-bit)。

?在macOS中,打開(kāi)Finder,單擊Applications以及Python 3.6,再單擊IDLE圖標(biāo)。

?在Ubuntu中,首先選擇Applications?Accessories?Terminal,接著輸入idle3。(還可以單擊屏幕上方的Applications,選擇Programming,再單擊IDLE 3。)

無(wú)論是哪種操作系統(tǒng),IDLE的窗口看起來(lái)都和圖0.1差不多。頂部的文字可能會(huì)有些許不同,這取決于讀者下載的Python版本。

圖0.1所示的這個(gè)窗口稱為交互式運(yùn)行環(huán)境(interactive shell)。在交互式運(yùn)行環(huán)境中,可以將指令輸入計(jì)算機(jī),這與macOS的Terminal或Windows的Command Prompt程序類(lèi)似。有時(shí),程序員可能不想編寫(xiě)一個(gè)完整的程序,只想試著執(zhí)行幾行代碼片段,Python交互式運(yùn)行環(huán)境就提供了這一功能,使得程序員能夠直接往里輸入指令,而計(jì)算機(jī)會(huì)立即讀取并執(zhí)行這些指令。

圖0.1 IDLE窗口

例如,將下列代碼輸入交互式運(yùn)行環(huán)境的 >>> 提示符之后。

>>> print('Hello, world!')

按回車(chē)鍵,交互式運(yùn)行環(huán)境將顯示以下內(nèi)容。

Hello, world!

小結(jié)

在現(xiàn)代密碼學(xué)引入計(jì)算機(jī)技術(shù)之前,僅靠紙和筆是無(wú)法破解大部分密碼的。雖然計(jì)算機(jī)使許多古老的、經(jīng)典的密碼變得十分脆弱,但學(xué)習(xí)這些密碼的過(guò)程仍然非常有趣。編寫(xiě)密碼分析程序去破解這些密碼是學(xué)習(xí)如何編程的好方法。

在第1章中,我們將從基礎(chǔ)的密碼學(xué)工具說(shuō)起,在沒(méi)有計(jì)算機(jī)幫助的情況下實(shí)現(xiàn)對(duì)信息的加密和解密。

讓我們開(kāi)始破解的相關(guān)學(xué)習(xí)吧!

主站蜘蛛池模板: 枣阳市| 中山市| 吴江市| 新乡县| 晋州市| 根河市| 通榆县| 进贤县| 青阳县| 依安县| 保定市| 石河子市| 阿勒泰市| 微山县| 锦州市| 讷河市| 达州市| 滨海县| 手游| 北碚区| 苍南县| 酉阳| 巴东县| 偃师市| 张掖市| 安庆市| 平果县| 昂仁县| 千阳县| 柏乡县| 高台县| 南溪县| 江华| 山东省| 宣威市| 大荔县| 吉木萨尔县| 临安市| 依兰县| 商河县| 庆安县|