1. 程式人生 > >Python凱撒密碼和反密碼

Python凱撒密碼和反密碼

代碼 ner 通過 sdn odi 完全 plain 密碼 http

凱撒密碼

  寫出字母表的字母從A到Z的數字從0到25根據每個字母。A下面是0,B下面是1,等等,直到Z,下面為25.(有字母表中的26個字母,但我們的數字只上升到25,因為我們開始在0,而不是1):

技術分享圖片

我們可以加密的字母,“Hello. How are you?” 為 “Uryyb. Ubj ner lbh?”

  用上面字母到數字的代碼,我們可以用數字來表示字母。這是一個非常強大的概念,因為數學使用數字。現在我們有了一個用字母寫數學的方法。

  現在加密,我們找到的數字下的字母,我們希望加密和添加密鑰號碼給它。這個總和將是加密信下的號碼。例如,我們加密,“Hello. How are you?” 用鑰匙13。首先,我們發現的H為7。然後我們添加這個號碼的關鍵。7 + 13 = 20。數字20是為字母U,這意味著字母H加密到字母U。加密的E字母,4加13得到17。17以上的數字是R,所以E得到加密R等。

  這樣效果很好,但是直到我們得到字母O。O下的數字是14。但當我們添加14 + 13我們得到27。但是我們的數字只有25。如果字母的數目和鍵的26或以上,我們應該減去它的26。所以27 - 26是1。數字1以上的字母是B,所以當我們使用密鑰的時候,字母O對字母B進行加密。一個接一個

  所以加密字母的步驟是:

  1。從1到25決定一個數字為密鑰。保持這個密鑰的秘密!

  2。找到明文字母的號碼。

  3。添加密鑰數字到明文字母的號碼,生成一個數字。

  4。如果這個數字大於26,減去26。

  5。找到你計算的數字對應的字母。這就是密文。

  6。對明文中的每個字母重復步驟2

  請看下面的表格,看看如何使用密鑰13加密“Hello. How are you?”。每個行都顯示了將左邊的明文字母轉到右側的密文的步驟。

技術分享圖片
  解密,減去密鑰數字,而不是添加它。對於密文B,數字是1。減去1 - 13得到- 12。像我們的“減法26”加密規則,當我們解密和結果是小於0,我們有一個“添加26”規則。- 12 + 26是14。所以密文字母B解密回字母O.

技術分享圖片

雙強度加密?

  如果我們對“KITTEN”3鍵,得到的密文就是“nlwwhq”。如果我們對“nlwwhq”4鍵,得到的密文,將“rpaalu”。但這與我們用“7”鍵一次加密“小貓”一詞是完全一樣的。我們的“雙”加密和普通加密是一樣的,所以它沒有更強的。

  對於大多數加密算法,加密一次以上不提供額外的密碼強度。事實上,如果你用兩個加起來等於26的密鑰加密一些明文,你最終得到的密文和原來的明文是一樣的!

反密碼

? 反向密碼通過反向打印來加密消息。所以“Hello world!” 加密到“!dlrow olleH”。要解密,只需反轉反向消息即可得到原始消息。加密和解密步驟相同。這是一種非常脆弱的密碼。只要看它的密文,你可以發現它只是相反的順序。 .syas ti tahw tuo erugif llits ylbaborp nac uoy ,detpyrcne si siht hguoht neve ,elpmaxe roF。

凱撒密碼加密解密的實現

# encoding:utf-8

import string


def Encrypt(yourStr, KEY):

    C = string.ascii_letters
    # 生成符號映射
    lc = [chr((i - 97) % 26 + 97) for i in range(97 + KEY, 123 + KEY)]
    uc = [chr((i - 65) % 26 + 65) for i in range(65 + KEY, 91 + KEY)]
    R = ''.join(lc) + ''.join(uc)

    return yourStr.translate(string.maketrans(C, R))


def Decrypt(yourStr, KEY):

    C = string.ascii_letters
    # 生成符號映射
    lc = [chr((i - 97) % 26 + 97) for i in range(97 + KEY, 123 + KEY)]
    uc = [chr((i - 65) % 26 + 65) for i in range(65 + KEY, 91 + KEY)]
    R = ''.join(lc) + ''.join(uc)

    return yourStr.translate(string.maketrans(R, C))


if __name__ == '__main__':
    plainText = 'hello the world!'
    cipherText = Encrypt(plainText, 7)
    print(cipherText)
    plainText = Decrypt(cipherText, 7)
    print(plainText)

運行結果:

olssv aol dvysk!
hello the world!
[Finished in 0.1s]

反密碼加密解密的實現

# Reverse Cipher

message = 'Three can keep a secret, if two of them are dead.'
translated = ''
i = len(message) - 1
while i >= 0:
print(translated)
    translated = translated + message[i]
    i = i - 1

運行結果:

.daed era meht fo owt fi ,terces a peek nac eerhT

這樣寫其實很不符合Python優雅的特性,對代碼進行大改造:

# Reverse Cipher

message = 'Three can keep a secret, if two of them are dead.'

def reverseDecrypt(str):
    return ''.join(reversed(message))

Python凱撒密碼和反密碼