凱撒密碼加解密及破解實現原理

概念及原理

根據百度百科上的解釋,凱撒密碼是一種古老的加密算法。算法

密碼的使用最先能夠追溯到古羅馬時期,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的「愷撒密碼」,它是一種替代密碼,經過將字母按順序推後起3位起到加密做用,如將字母A換做字母D,將字母B換做字母E。因聽說愷撒是率先使用加密函的古代將領之一,所以這種加密方法被稱爲愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就能夠破譯。 現今又叫「移位密碼」,只不過移動的爲數不必定是3位而已。數組

密碼術能夠大體別分爲兩種,即易位和替換,固然也有二者結合的更復雜的方法。在易位中字母不變,位置改變;替換中字母改變,位置不變。安全

將替換密碼用於軍事用途的第一個文件記載是愷撒著的《高盧記》。愷撒描述了他如何將密信送到正處在被圍困、瀕臨投降的西塞羅。其中羅馬字母被替換成希臘字母使得敵人根本沒法看懂信息。函數

蘇託尼厄斯在公元二世紀寫的《愷撒傳》中對愷撒用過的其中一種替換密碼做了詳細的描寫。愷撒只是簡單地把信息中的每個字母用字母表中的該字母后的第三個字母代替。這種密碼替換一般叫作愷撒移位密碼,或簡單的說,愷撒密碼。加密

在密碼學中,凱撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡單且最廣爲人知的加密技術。它是一種替換加密的技術。這個加密方法是以愷撒的名字命名的,當年愷撒曾用此方法與其將軍們進行聯繫。愷撒密碼一般被做爲其餘更復雜的加密方法中的一個步驟,例如維吉尼亞密碼。愷撒密碼還在現代的ROT13系統中被應用。可是和全部的利用字母表進行替換的加密技術同樣,愷撒密碼很是容易被破解,並且在實際應用中也沒法保證通訊安全。spa

說了這麼多,相信你們可能也有點暈了,下面這張圖加密方法就是錯三個位來實現加密功能設計

              

(1)  設計思想:code

  1. 因爲輸入的是一串英文字符,因此咱們用String類來編寫,何況String類有許多方法能夠調用
  2. 錯位須要對每一個字符進行操做,能夠把字符串轉換爲字符數組,調用的是string類的toCharArray方法
  3. 因爲string類也是採用Unicode字符集,因此咱們進行錯位操做時只需讀取一個字符,而後與數字3相加,再轉換爲char類型,就實現了錯3位加密操做,解密則減3.
  4. 在加密操做中,若是加密的是字母表最後三個,則必須實現循環操做,即X加密後是A,Y加密後是B,Z加密後是C,實現這個就要用到ASCII碼,當讀到XYZ時,加密則是減去23後轉換爲char類型,固然,解密時讀到ABC加上23便可

(2)  程序流程圖:blog

                            

 

實現過程

咱們定義個key=13,此時咱們對字符串This is my secret message進行加密ip

import pyperclip

message = 'This is my secret message'#保存加密或解密的字符串
key = 13#保存加密密鑰的整數

mode = 'encrypt'

LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

translated = ''

message = message.upper()

for symbol in message:
    if symbol in LETTERS:
        num = LETTERS.find(symbol)
        if mode == 'encrypt':
            num = num + key
        elif mode == 'decrypt':
            num = num - key

        if num >= len(LETTERS):
            num = num - len(LETTERS)
        elif num < 0:
            num = num + len(LETTERS)

        translated = translated + LETTERS[num]

    else:
        translated = translated + symbol

print(translated)

pyperclip.copy(translated)

打印結果以下:

GUVF VF ZL FRPERG ZRFFNTR
[Finished in 0.8s]

咱們來對上面這部分代碼進行分析

咱們能夠看到,第一行調用了一個pyperclip的模塊,咱們須要下載這個模塊,很簡單,安裝一個pip,直接輸入pip install pyperclip便可完成安裝

message = 'This is my secret message'#保存加密或解密的字符串
key = 13#保存加密密鑰的整數

message指定了用來保存加解密的字符串

而key用來保存加密密鑰

message = message.upper()

調用了一個upper函數,將加解密字符串所有變成大寫字母

後面的實現過程很簡單,判斷mode值是否爲encrpy,而後對字符進行移位

破解原理及實現

咱們將加密後的字符串進行破解,實現原理以下:

import pyperclip

message = 'GUVF VF ZL FRPERG ZRFFNTR'

LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for key in range(len(LETTERS)):

    translated = ''

    for symbol in message:
        if symbol in LETTERS:
            num = LETTERS.find(symbol)
            num = num - key

            if num < 0:
                num = num + len(LETTERS)

            translated = translated + LETTERS[num]

        else:
            translated = translated + symbol

    print('Key #%s:%s'%(key,translated))

打印結果以下:

Key #0:GUVF VF ZL FRPERG ZRFFNTR
Key #1:FTUE UE YK EQODQF YQEEMSQ
Key #2:ESTD TD XJ DPNCPE XPDDLRP
Key #3:DRSC SC WI COMBOD WOCCKQO
Key #4:CQRB RB VH BNLANC VNBBJPN
Key #5:BPQA QA UG AMKZMB UMAAIOM
Key #6:AOPZ PZ TF ZLJYLA TLZZHNL
Key #7:ZNOY OY SE YKIXKZ SKYYGMK
Key #8:YMNX NX RD XJHWJY RJXXFLJ
Key #9:XLMW MW QC WIGVIX QIWWEKI
Key #10:WKLV LV PB VHFUHW PHVVDJH
Key #11:VJKU KU OA UGETGV OGUUCIG
Key #12:UIJT JT NZ TFDSFU NFTTBHF
Key #13:THIS IS MY SECRET MESSAGE
Key #14:SGHR HR LX RDBQDS LDRRZFD
Key #15:RFGQ GQ KW QCAPCR KCQQYEC
Key #16:QEFP FP JV PBZOBQ JBPPXDB
Key #17:PDEO EO IU OAYNAP IAOOWCA
Key #18:OCDN DN HT NZXMZO HZNNVBZ
Key #19:NBCM CM GS MYWLYN GYMMUAY
Key #20:MABL BL FR LXVKXM FXLLTZX
Key #21:LZAK AK EQ KWUJWL EWKKSYW
Key #22:KYZJ ZJ DP JVTIVK DVJJRXV
Key #23:JXYI YI CO IUSHUJ CUIIQWU
Key #24:IWXH XH BN HTRGTI BTHHPVT
Key #25:HVWG WG AM GSQFSH ASGGOUS
[Finished in 0.2s]

咱們能夠看出,Key#13即爲咱們所求的答案

相關文章
相關標籤/搜索