密碼學 - 簡單替換密碼



如果您正在尋找一種簡單且廣泛使用的密碼,則簡單替換密碼是絕佳的選擇。在這個密碼中,我們將學習簡單替換密碼到底是什麼以及它如何以非常簡單的方式工作。因此,基本上,在這種技術中,我們可以用相應的密文字元替換每個明文字元。與凱撒密碼演算法不同,簡單替換密碼會更改字母的順序,因此此過程為加密過程增加了額外的複雜性。

替換密碼是一種編碼技術,其中密文替換預定義系統中的明文單元。 “單元”可以是單個字母(最常見)、字母對、字母三元組或上述組合。透過使用逆替換,接收者解密文字。在替換密碼中,我們用不同的字母替換明文字母。

加密訊息 - 加密訊息需要兩個要素:金鑰(字母替換)和加密技術(在本例中為簡單替換)。請注意,如果我們認為我們的訊息不再安全,我們應該繼續使用相同的技術(簡單替換),但更改金鑰(使用替代字母替換)。

解密訊息 - 如果你知道金鑰,這應該不是問題。無論密文字元按字母順序排列是否有幫助,金鑰對於加密和解密都是相同的。

例如,如果偏移量為 2,則 A 將被替換為 c,B 將變為 D,C 變為 E,依此類推。

它是如何工作的?

  • 首先,我們必須確定字母表中哪個字母將替換每個給定的原始字母。

  • 因此,要使用簡單替換密碼加密訊息,我們必須用給定秘密字元對映中的相應字元替換訊息中的每個字元。例如,如果“A”對映到“D”,則訊息中的每個“A”都應替換為“D”,依此類推,對於每個字元。

  • 要解密給定的編碼訊息,我們必須反轉加密過程。因此,我們將使用秘密字母對映將每個編碼字母替換為其原始字母。

  • 秘密字母對映是密碼的關鍵。如果不瞭解此對映,則很難解密訊息。

示例

簡單替換密碼的金鑰基本上包含 26 個字母。一個示例金鑰為 -

明文字母表 abcdefghijklmnopqrstuvwxyz
密文字母表 phqgiumeaylnofdxjkrcvstzwb

使用上述金鑰的示例加密為 -

明文 hello, this world is so beautiful!
密文 gtyyj, ngzf cjpyk zf fj htvbnzdby!

使用 Python 實現

因此,我們藉助 Python 的字串和隨機模組實現了簡單的替換密碼。

字串模組用於獲取所有小寫字母 (string.ascii_lowercase),而隨機模組用於隨機排列字母表。我們生成了字母表中字母的隨機對映,藉助給定的對映加密訊息,並藉助對映解密加密的訊息。

示例

以下是使用 Python 的字串和隨機模組的簡單替換密碼演算法的 Python 實現。請參見下面的程式 -

import string
import random

def generate_mapping():
   alphabet = list(string.ascii_lowercase)  # Get all lowercase letters
   shuffled_alphabet = alphabet[:]  # Make a copy of the alphabet
   random.shuffle(shuffled_alphabet)  # Shuffle the copy
   return dict(zip(alphabet, shuffled_alphabet))  

# function for encryption
def encrypt(message, mapping):
   encrypted_message = ''
   for char in message.lower():
      if char in mapping:
         encrypted_message += mapping[char]
      else:
         encrypted_message += char
   return encrypted_message
# function for decryption 
def decrypt(encrypted_message, mapping):
   inverse_mapping = {v: k for k, v in mapping.items()}  # Create an inverse mapping
   decrypted_message = ''
   for char in encrypted_message.lower():
      if char in inverse_mapping:
         decrypted_message += inverse_mapping[char]
      else:
         decrypted_message += char
   return decrypted_message

# generate a random mapping
mapping = generate_mapping()

# message to encrypt
message = "Hello, world!"

# encrypt the message
encrypted_message = encrypt(message, mapping)
print("Our Encrypted Message:", encrypted_message)

# eecrypt the message
decrypted_message = decrypt(encrypted_message, mapping)
print("Our Decrypted Message:", decrypted_message)

以下是上述示例的輸出 -

輸入/輸出

Our Encrypted Message: nsgga, taigj!
Our Decrypted Message: hello, world!

缺點

此密碼的基本缺點是它很容易破解。一旦攻擊者發現用於替換字母的對映,他就可以輕鬆解碼任何訊息。

它也可以使用頻率分析來破解。當您檢視加密訊息中某些字母或字母組出現的頻率時,更容易猜測它。這意味著簡單替換密碼對於保護我們的私人資料並不是非常安全。

簡單替換密碼的密碼分析

簡單替換密碼的密碼分析是指解密秘密訊息,該訊息是一種程式碼,其中一個字母通常被替換為另一個字母。我們可以透過將程式碼的字母頻率與已知的語言字母頻率進行比較來對其進行解密。使用標點符號和空格等指示,以及一些典型模式,我們可以逐步解密訊息。這與透過猜測哪些元素代表來解決難題相同,具體取決於它們出現的頻率。

總結

在本章中,我們學習了簡單替換密碼及其在不同程式語言中的簡單實現。替換密碼非常易於理解和使用,但在安全性方面,它並不安全。其背後的原因是它的簡單性:一旦攻擊者破解了對映,他就可以輕鬆地解密任何訊息。用於破解這些密碼的技術之一是頻率分析。因此,不建議在需要強安全性的情況下使用它。

廣告

© . All rights reserved.