使用Python實現凱撒加密算法

2020-12-13 python高手養成

我來,我見,我徵服!————凱撒大帝

網絡在古典密碼學中,有一個著名的凱撒密碼,是一種簡單而廣為人知的加密技術(廣為人知?這對與加密算法來說就不是好事,就很容易被破解),它是一種替代加密技術,雖然用現代技術很容易將密文進行破解。但是在當時,要破解這種密碼確實很難的,但對於密碼學的發展,凱撒密碼對於後續替代加密算法影響深遠……今天,我們對這一技術進行深入探討。

【凱撒密碼起源】

根據蘇維託尼烏斯(古羅馬帝國早期的著名傳記體歷史作家,應該不會錯)的記載,在古羅馬時期作戰中,為防止己方情報被對方獲取,凱撒與他的將軍們進行軍事聯絡時,會將信息進行加密(保密意識很強哦),據說,當時使用的加密技術就是我們現在看到的凱撒密碼算法。現在想想凱撒大帝確實很聰明哦!

凱撒大帝在元老院(圖片來自網絡)

在當時來說,沒有工具的輔助支持,加之與凱撒作戰的敵人大多是目不識丁的人(不像現代哦,那時候可能作戰對體質方面要求更高一點),即時他們截獲這些加密的信息,他們可能以為是凱撒使用的是一種外文(當時文字並沒有統一),對於凱撒的敵人來講,要破譯這種密碼也是有一定難度的,史料上也沒有當時人在作戰中破解凱撒密碼的記載,我們暫時可以認為這種加密技術在當時來說是比較先進的。

據說,現存最早的凱撒密碼破解方法被記載在阿爾·肯迪(阿拉伯人,出生於公元9世紀左右)的頻率分析著作中。有興趣的讀者可以看一看。

【凱撒密碼加密算法】

算法具體是這樣描述的:首先提供一個字母表和需要加密的明文(實質是大家都知道意思的字母表的排列組合),再在加密方和解密方之間確定一個相互都知道的密鑰n,拿出明文中第一個字符,在字母表中找到該字符,然後將該字符按照字母表的順序移動n位,找到該字符在字母表中的替代字符將其替代,然後依次類推,後面的字符按照前述方法進行替代,最終替代後的字符串就是加密後的密文。舉個例子,如果要加密英文「this」,密鑰為4,則加密後密文為「ftue」。當然,古羅馬使用的字符可能不是英文字母,但計算方法就是這樣的。

凱撒密碼輪盤

研究凱撒密碼時,人們通常會製作一個像上圖所示的輪盤,中間白色部分是固定的,我們轉動外圈橙色的字母表,比如轉動到圖示所在的位置,由於A字母的索引位置固定(0),轉動後我們找到外圈橙色轉盤中A的位置,它對應字母J的位置,而J的索引位置是9,因此,我們確定密鑰就是9,將密鑰通知凱撒和它的將軍們,軍事情報中碰到字母A就用J代替,B用K代替……依次類推,當解密的時候也很簡單了,碰到字母J用A代替,K用B代替……依次類推就可以將軍事情報還原為明文類型了。

【加密算法Python實現】

在該程序設計中,我們面臨的難點主要有兩個:

一是古羅馬的字符跟我們現在使用的字符是不一樣的,我們的程序應該實現對字符表進行替換的功能,還有密鑰應該也是可以自定義的。因此,我們將字母表、密鑰等作為參數封裝到一個函數中去實現。二是遍歷明文中如果一個字母位移超出字母表的長度時,應該從頭開始繼續索引,跟上面的轉盤的原理是一樣的,這在程序中如何體現?道理很簡單,應該是當索引超出字母表範圍後將索引值再減去字母表的長度即可。解密算法類推,當索引小於0時,加上字母長度即可實現轉盤的效果。現在我們來看代碼,如下圖所示。

Python實現凱撒密碼算法

怎麼樣,準確實現。程序中定義的主要參數如下:

【message】要加密的內容,即明文【key】相當於密鑰,傳入整型數據【mode】是要加密還是解密, encrypt表示加密,decrypt表示解密【SourceLetter】明文字母表,相當於加密輪盤上白色固定字母【總結】

幾行代碼使用Python實現了凱撒密碼算法,這可是危險的,需要知道的是加密的目的是為了不讓別人看到真實的信息或者通過破譯還原真實信息,凱撒密碼雖然現在來講是很簡單的,但是當時卻不容易被破譯,雖然現在很少見到使用凱撒密碼加密的例子,但它作為一種技術,我們在驚嘆發明它的人的聰明之外,它在密碼學發展中的地位確實不容忽視的,作為Python小白來說實現這一算法也是學習密碼學的必經之路。感興趣的朋友們敲一敲代碼,希望大家有所提高……

歡迎留言討論!

轉載請註明出處(百家號:Python高手養成)

相關焦點

  • 使用Python強制破譯凱撒加密算法
    上一篇我們討論了凱撒密碼的Python實現。其中,我們也分析了凱撒密碼是非常容易被破解的一種加密算法。今天,我們看下凱撒密碼到底是如何被容易破解的?詳細探討下整個破解過程。圖片來自網絡【分 析】我們知道,凱撒加密算法是使用移位、替換的過程對目標文本進行加密的。我們在破解過程中反其道而行之。
  • 高斯混合模型(GMM):理念、數學、EM算法和python實現
    高斯混合模型是一種流行的無監督學習算法。GMM方法類似於K-Means聚類算法,但是由於其複雜性,它更健壯,更有用。K-means聚類使用歐式距離函數來發現數據中的聚類。只要數據相對於質心呈圓形分布,此方法就可以很好地工作。
  • 使用Go 語言實現凱撒加密
    . —— 尤利烏斯·凱撒(Julius Caesar)正如代碼清單 9-6 所示, 使用計算機以數值方式處理字符是非常容易的。為了解決這個問題, 最初的凱撒加密法採取了迴繞措施, 也就是將 'x' 變為 'a' 、 'y' 變為 'b' , 而 'z' 則變為 'c' 。
  • Python和人工智慧有什麼關係?Python 和人工智慧的區別是什麼?
    人工智慧是一個大的範疇,包括很多方面的應用,比如機器學習,在機器學習中的回歸算法,它們是通過統計分析所有數據來建立多因式,然後求解式子,而在這個過程中程式語言起到的作用是清洗數據、處理數據、建立關係求解結果的作用,python適用於數據清洗且學習成本低,所以在一定程度上,好一部分人傾向於將python應用於人工智慧應用領域。
  • Python開發簡單爬蟲【學習資料總結】
    二、URL管理器和實現方法 防止重複抓取、防止循環抓取 使用HTTPCookieProcessor; 需要代理才能訪問的網頁使用ProxyHandler; 需要HTTPS加密訪問的網站使用HTTPSHandler; 有些URL存在相互自動跳轉的關係使用
  • 使用K-means 算法進行客戶分類
    在本部分中,你將理解並學習到如何實現K-Means聚類。保證K-Means算法收斂到局部最優。部分使用案例如下:  k - means聚類算法步驟1對於python,我使用的是Spyder Editor。下面,我們將展示K-means算法如何處理客戶費用和發票數據的例子。我們有500個客戶數據,我們關注兩個客戶特徵: 客戶發票,客戶費用。
  • Python編寫遺傳算法實戰,整數編碼,啟發式搜索解決旅行商問題
    上一篇寫了遺傳算法的原理,這一篇寫遺傳算法解決旅行商問題的實戰,而且使用python編寫。近幾年python越來越受歡迎,其中主要是簡單易學和上手快,並且編代碼的效率高,甚至有人喊出「人生苦短,我要用python」的口號,所以小編也來湊湊熱鬧。
  • 教程| 從頭開始:用Python實現決策樹算法
    如下是實現上述過程的名為 predict() 函數,你可以看到它是如何處理給定節點的下標與數值的。接著,我們使用合成的數據集來測試該函數。如下是一個使用僅有一個節點的硬編碼樹(即決策樹樁)的案例。該案例中對數據集中的每個數據進行了預測。運行該例子,它將按照預期列印出每個數據的預測結果。
  • 算法圖解(六)| 廣度優先搜索算法
    算法圖解第六章-廣度優先搜索6.1、廣度優先搜索廣度優先搜索讓你能夠找出兩樣東西之間的最短距離,最短距離的含義有很多,使用廣度優先搜索可以:(1)編寫國際跳棋AI,為了尋找最短路徑,一般先從一度關係開始找起,若一度關係中找不到想要的,再開始找二度關係,編程中如何實現這種順序,則是利用隊列來完成。
  • 基於規則的預測算法和基於機器學習的預測算法
    如果一輛車子要實現自動駕駛,那麼障礙物感知絕對是最基礎也是最核心的功能。Apollo 障礙物感知系統分為3D 檢測、ROI 濾波、識別、運算、感知五大板塊。其感知過程如下:首先 LiDAR 探測到信號,傳遞給 ROI 的 Filter,濾波後的信號通過 Obstacle Segmentation 和 Detection 做識別,然後是 Tracking,Apollo 在運算這一塊採用的是 NVIDIA GPU,運算能力強勁,可以實現 10Hz 的輸出,最後是 Obstacles 感知。
  • 算法系列 | 如何在 S32V 中實現危險駕駛行為檢測
    本篇文章我們就來跟大家如何在 NXP S32V 平臺上危險實現駕駛行為檢測。一、 危險行為行為1.1、概念簡介我們經常遇到這樣的場景:一盞燈變成綠色,你面前的車不走。 另外,在沒有任何意外發生的情況下,前面的車輛突然減速,或者轉彎變道。 等等這些現象,給道路安全帶來了很大的影響。
  • python+ pycharm 環境安裝 + pycharm使用
    一、下載和安裝python1.可以搜索python官網找到官方連結點擊進入2.也可以用以下連結點擊進入:https://www.python.org/3.進入python後把滑鼠移到downloads上,然後看到下拉選項
  • 如何使用鍊表實現 LRU 算法
    什麼是 LRU 算法LRU 是一種緩存淘汰策略。計算機的緩存容量有限,如果緩存滿了就要刪除一些內容,給新的內容騰位置。但是要刪除哪些內容呢?我們肯定希望刪掉那些沒有用的緩存,而把有用的數據繼續留在緩存中,方便之後繼續使用。
  • python滑鼠連點器-測試版
    這裡使用的是清華大學的鏡像下載的,還有豆瓣什麼的都可以,速度會比較快,搞定。查看官方文檔總共就三部分內容,滑鼠,鍵盤和平臺限制,我們主要看第一第二部分,這個庫允許我們去控制和監測輸入設備,符合我的要求。
  • 常用的相似性度量算法(原理,實現,優缺點,適用場景...
    內容導讀對相似性算法的了解起源於最近在做 使用協同過濾原理 的推薦系統中, 基於鄰域的推薦算法 (User-Based CF和 和 Item-Based CF)需要估算不同樣本之間的 相似性度量(Similarity Measurement) ,這也是機器學習中在做 分類 的時候的一個常見場景。
  • 慢步python,你苦苦找尋的python中文使用手冊在哪裡?這裡有答案
    #學習難度大python對大家來說,應該算是相對新的程式語言。即使這樣,我們學習python的道路依舊困難重重。問題在,相關的學習資料不夠系統。初學者使用手冊像以前剛開始使用電視、手機一樣,都有一本使用說明書,即使用手冊。
  • 算法|Python-BFS算法舉例分析
    問題描述BFS算法,也稱作廣度優先搜索算法。是一種圖形搜索演算法。簡單的說,BFS是從根節點開始,沿著樹的寬度遍歷樹的節點,如果發現目標,則演算終止。(百度百科)舉例分析:先用一個樹結構來說明bfs算法的搜索規律如果上圖要用bfs算法的話。
  • Python突破12306最後一道防線,實現自動搶票(附源碼)
    使用Python+Splinter自動刷新搶票,可以成功搶到。(依賴自己的網絡環境太厲害,還有機器的好壞)Splinter是一個使用Python開發的開源Web應用測試工具,它可以幫你實現自動瀏覽站點和與其進行交互,Splinter執行的時候會自動打開你指定的瀏覽器,訪問指定的URL。
  • 介紹一下什麼是python(瘋狂Python)
    後續我會不斷努力的更新關於學英語的一些文章,同時,我也會不斷更新新的知識(譬如:程式語言:python,資料庫:mysql,Linux系統的一些操作等等,與大家一起學習進步)。進入正題,大家都應該聽說過Python這門程式語言吧,它在程式語言中的排名不斷的再提升,之所以這麼受歡迎,是因為它簡單,易學。
  • python操作Power Point:使用演示文稿
    上節簡單介紹了PPT的python大法,這節開始詳細介紹如何在python裡調用打開和使用PPT文檔。python操作Power Point:使用演示文稿使用演示文稿python-pptx允許您創建新的演示文稿以及對現有演示文稿進行更改。實際上,它只允許您更改現有演示文稿; 只是如果你從一個沒有任何幻燈片的演示文稿開始,它首先感覺就像你從頭開始創建一個幻燈片。