tft每日頭條

 > 生活

 > python密碼加密法

python密碼加密法

生活 更新时间:2024-07-19 06:12:31

1 什麼是密碼學

自古以來,間諜、士兵、黑客、海盜、商人等人,大多依靠密碼學來确保他們的秘密不會人盡皆知。密碼學是一門使用秘密編碼的學科。想要明白密碼長什麼樣,看一看下面兩段文本。

nyr N.vNwz5uNz5Ns6620Nz0N3z2v

N yvNwz9vNz5N6!9Nyvr9

y0QNnvNwv tyNz

Nw964N6!9N5vzxys690,N.vN2z5u-

3vNz Nr Ny64v,N.vNt644!5ztr vNz

N 6N6 yv90,Nr5uNz Nsvt64v0N

yvN7967v9 BN6wNr33Q N-m63 rz9v

!NN2 Nuwv,N9,vNN!vNrBN3zyN4vN

N6 Qvv0z6nvN.7N0yv4N 4 zzvNN

vyN,NN99z0zz6wz0y3vv26 9

w296vyNNrrNyQst.560N94Nu5y

rN5nz5vv5t6v63zNr5.

N75sz6966NNvw6 zu0 wtNxs6t

49NrN3Ny9Nvzy!

以上左側的文本是一個經過加密(轉換為秘密編碼)的消息。對于那些不知道如何将密碼解密(将其轉換回原始的英文消息)的人來說,它完全不可讀。而以上右側的文本是随機的“胡言亂語”,沒有任何隐藏的含義。加密使不懂得如何解密的人即便拿到了密碼,也無法參透其中的含義,因為加密後的消息和随機的“胡言亂語”毫無區别。

密碼學家使用和研究密碼。當然,這些秘密消息并不總是保密的。密碼分析學家,又稱為密碼破解者或黑客,可以破解密碼并讀懂他人的加密消息。本書講解如何使用各種技術對信息進行加密和解密。

2 編碼與密碼

與密碼不同的是,編碼的方式是可以公開獲得并理解的。編碼使用符号替換消息中的内容,任何人都可以查閱符号是如何進行翻譯的。

19世紀初,一個著名的編碼來源于電報的發展,它使各地通過電線進行即時通信成為現實。用電報發送信息比之前騎馬去送一大袋信件的傳統方式要快得多。然而,電報不能直接發送紙上書寫的字母,它隻能發送兩種類型的電脈沖:稱為“點”的短脈沖和稱為“線”的長脈沖。

要将字母表中的字母轉換成脈沖類型中的點和線,需要一個編碼系統将英語翻譯成電脈沖。英語轉換成電報發送的點和線的過程稱為編碼,而收到消息時把電脈沖轉換成英語的過程稱為解碼。電報(和後來的無線電)對消息進行編碼和解碼的方式稱為摩爾斯電碼,如表1-1所示。摩爾斯電碼是由Samuel Morse和Alfred Vail開發的。

python密碼加密法(Python密碼學入門凱撒密碼)1

電報操作員通過在擁有一個按鈕的電報機上敲擊點和線,可以向世界另一邊的人傳達英語信息,而且僅需要很短的時間!

與編碼相對,密碼是一種特定類型的編碼方式,目的是保證消息的機密性。可以使用密碼将可理解的英文文本(稱為明文)轉換為隐藏秘密的亂碼(稱為密文)。密碼是使明文和密文相互轉換的一組規則。這些規則中,通常會使用一個隻有通信者知道的密鑰來進行加密或解密。在這本書中,讀者将學習幾個密碼,并編寫程序來使用這些密碼對文本進行加密和解密。但在此之前,讓我們先用簡單的紙質工具手動完成文本加密。

3 凱撒密碼

即将學習的第一個密碼是凱撒密碼,它以早期使用者Julius Caesar的名字命名。它簡單易學,但也因此極易被密碼分析員破解。但是,它仍然可以用來進行練習。

凱撒密碼通過替換字母完成加密,每個字母由字母表中其後特定位數的字母代替。例如,Julius Caesar将字母表向後移動3個字母的位置,然後用得到的新字母表中的字母替換原消息中的每個字母。

例如,消息中的每一個A都變成D,每個B都變成E等。當Caesar需要将字母表末尾的字母(如Y)移位時,他會繞回到字母表的開頭,移動3個位置到B。在本節中,将使用凱撒密碼手動加密消息。

3.1 密碼輪

為了更方便地使用凱撒密碼将明文轉換為密文,将使用一個密碼輪,也稱為密碼盤。密碼輪包含兩個由字母組成的環,每個環有26個槽(為字母表的26個字母準備)。外圈表示明文中的字母,内圈表示在密文中相對應的字母。内圈同樣把字母從0到25進行标号,這些數字代表加密密鑰,這裡的加密密鑰是指将A移動到内環上對應的字母所需經過的字母位數。因為輪盤是圓形的,用大于25的密鑰移位會使字母表繞一整個圈,所以移動26位與移動0位相同,移動27位與移動1位相同,以此類推。

讀者可以通過原書網站在線訪問虛拟的密碼輪,其形式如圖1-1所示。為了旋轉密碼輪,需要先單擊它,然後移動鼠标光标,直到想要的配置到位。再次單擊鼠标,密碼輪停止旋轉。

在本書的配套資源中也可以獲得可打印的紙版密碼輪。剪下兩個圓圈,把它們疊放,小的圓圈放在大的圓圈中間。在兩個圓圈的中心插入一個大頭釘或曲頭釘,這樣它們就可以旋轉了。

無論使用紙質密碼輪還是虛拟密碼輪,都可以完成手動加密。

python密碼加密法(Python密碼學入門凱撒密碼)2

圖1-1 在線密碼輪

3.2 使用密碼輪進行加密

開始加密前,請先用英文在一張紙上寫下待加密的消息。在這個例子中,待加密消息是“THE SECRET PASSWORD IS ROSEBUD”。接下來,旋轉密碼輪的内輪,直到它的槽與外輪中的槽相匹配。注意外輪上字母“A”旁邊的點,點在内輪上最接近的數字就是加密密鑰。

例如,在圖1-1中,外輪的“A”對應内輪的8。現在使用8作為加密密鑰來加密上面例子中的消息,如圖1-2所示。

python密碼加密法(Python密碼學入門凱撒密碼)3

圖1-2 用8作為密鑰的凱撒密碼加密消息

在外輪上找到消息中的每一個字母,并用内輪中對應的字母替換它。在這個例子中,消息的第一個字母是“T”(在“THE SECRET…”中的第一個“T”),因此在外輪上找到字母“T”,然後在内輪上找到對應的字母,也就是字母“B”。秘密信息總是用“B”替換“T”。(如果使用不同的加密密鑰,則明文中的每個T将被替換為其他的字母。)消息中的下一個字母是“H”,加密時變成“P”,而字母“E”變成“M”。外輪上的每個字母總是加密為内輪上固定的對應字母。為了節省時間,在查找“THE SECRET…”中的第一個“T”并且發現它加密變成“B”之後,就可以将消息中的每個“T”都替換為“B”,因此每個字母隻需查找一次。

在對整個消息進行加密之後,原始消息“THE SECRET PASSWORD IS ROSEBUD”就變成了“BPM AMKZMB XIAAEWZL QA ZWAMJCL”。注意,非字母字符(如空格)是沒有改變的。

現在,可以把這個加密後的消息發送給他人(或者自己保存),除非告訴他們密鑰,否則沒有人能夠讀懂消息的含義。請确保加密密鑰是保密的,因為任何知道消息是用密鑰8加密的人都可以讀懂密文。

3.3 使用密碼輪進行解密

要對密文進行解密,需要查找從密碼輪的内輪到外輪的映射。假設接收的密文為“IWT CTL EPHHLDGS XH HLDGSUXHW”,除非知道密鑰(或者是一個聰明的黑客),否則将無法解密該消息。幸運的是,朋友已經提前告知,他們對消息加密時使用的密鑰是15。該密鑰的密碼輪如圖1-3所示。

python密碼加密法(Python密碼學入門凱撒密碼)4

圖1-3 密鑰設為15的密碼輪

現在可以将外輪上的字母“A”(下面帶點的那個字母)與内輪上的數字15(字母“P”)相對應。然後,在内輪上找到密文的第一個字母,即“I”,并查看外圈對應的字母,即“T”。密文中的第二個字母“W”解密為字母“H”。對密文中剩下的字母進行解密,還原成明文,可以得到完整的消息“THE NEW PASSWORD IS SWORDFISH”,如圖1-4所示。

python密碼加密法(Python密碼學入門凱撒密碼)5

圖1-4 用密鑰為15的凱撒密碼解密消息

如果使用不正确的密鑰(如16),則解密的消息将是“SGD MVV OZRRVNQC HR RVNQCEHG”,依然不可讀。除非使用正确的密鑰,否則解密出來的消息也是不可理解的。

3.4 通過計算進行加密和解密

使用密碼輪實現凱撒密碼的加密和解密是十分便捷的,但是也可以通過數學計算進行加密和解密。在此過程中,從“A”到“Z”寫出字母表中的字母,在每個字母下标注數字0~25。從“A”下面的0開始,“B”下面是1,以此類推,直到“Z”下面是25,如圖1-5所示。

python密碼加密法(Python密碼學入門凱撒密碼)6

圖1-5 為字母标号0~25

可以用這些數字來表示對應的字母。這是一個強有力的概念,有了它的存在,就可以在字母上進行數學運算。如果将字母“CAT”表示為數字2、0和19,分别加3獲得數字5、3和22,則根據圖1-5,這些新的數字表示字母“FDW”,這樣就實現了為“CAT”加密。稍後,會設計一個計算機程序實現這一計算過程。

要運用算術實現凱撒密碼的加密,請找到要加密的字母下方的數字,并将其加上密鑰的值,得到的和就是對應密文字母下的數字。可以使用1~25的任意數字作為密鑰,例如,使用密鑰13加密“HELLO. HOW ARE YOU?”。首先,找到“H”下的數字7,然後加上13:7+13=20。因為數字20在字母“U”之下,所以字母“H”加密得到“U”。

類似地,加密字母“E”(4)為4 13=17。因為17對應的是“R”,所以“E”加密得到“R”,以此類推。

直到字母“O”之前的過程都很順利。“O”之下的數字是14,但是14加上13是27,而序号隻到25。如果字母對應的數字和密鑰相加的和是26或者更多,則需要從結果中減去26。在此例中,27−26=1。1對應的字母是“B”,因此“O”用密鑰13加密得到“B”。消息中的每一個字母加密完成後,密文是“URYYB. UBJ NER LBH?”

要對密文進行解密,需要減去密鑰而不再是進行加法運算。密文字母“B”對應的數字是1,1減去13得到−12。類似于“減去26”的加密規則,當解密結果小于0時,需要加上26。因為−12 26=14,所以密文字母“B”解密為“O”。

本文摘自剛剛上架的《Python密碼學編程 第2版》,[美] 阿爾·斯維加特(Al Sweigart) 著,鄭新芳,趙怡翾 譯。

python密碼加密法(Python密碼學入門凱撒密碼)7

  • 本書是學習用Python編程實現加密算法的初學者指南
  • 本書附帶示例源代碼,幫助讀者學以緻用
  • 本書配有課後習題及答案,可幫助讀者加深知識理解

通過閱讀本書,您将學習如何通過 Python 編程制作和破解密碼,以此創建和發送密文!學習 Python 編程的基礎 知識之後,您将從使用反向和凱撒密碼的簡單程序開始,了解為公開密鑰加密的方法,該加密方法用于保護在線事務的 正常運作,包括數字簽名和電子郵件。另外,您還将學習如何使用經典密碼(如置換密碼和維吉尼亞密碼)對文本進行加密。 每個程序都包含完整的代碼和逐行說明。本書結尾,您将學習如何使用 Python 進行編碼。

您還将學習以下内容:

  • 将循環、變量和流控制語句組合到實際的工作程序中;
  • 使用字典文件檢測解密的消息是有效的英文還是亂碼;
  • 創建并測試程序以确保代碼正确加密和解密;
  • 對仿射密碼進行編碼(破解)的示例(使用模塊化算術對消息進行加密);
  • 使用暴力算法和頻率分析等技術破解密碼。

簡要目錄

第1章 制作紙質密碼學工具免費

第2章 在交互式運行環境中編程免費

第3章 字符串及編寫程序

第4章 反向密碼

第5章 凱撒密碼

第6章 用暴力算法破解凱撒密碼

第7章 通過置換密碼實現加密

第8章 解密置換密碼

第9章 編寫測試程序

第10章 文件的加密與解密

第11章 編程檢測英語文本

第12章 破解置換密碼

第13章 仿射密碼的模運算模塊

第14章 編寫仿射密碼

第15章 破解仿射密碼

第16章 編寫簡單代換密碼

第17章 破解簡單代換密碼

第18章 編寫維吉尼亞密碼

第19章 頻率分析

第20章 破解維吉尼亞密碼

第21章 一次一密

第22章 素數的查找與生成

第23章 為公鑰密碼生成密鑰

第24章 編寫公鑰密碼算法

附錄 調試Python代碼

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved