密码学 - 简单替换密码



如果您正在寻找一种简单且广泛使用的密码,则简单替换密码是绝佳的选择。在这个密码中,我们将学习简单替换密码到底是什么以及它如何以非常简单的方式工作。因此,基本上,在这种技术中,我们可以用相应的密文字符替换每个明文字符。与凯撒密码算法不同,简单替换密码会更改字母的顺序,因此此过程为加密过程增加了额外的复杂性。

替换密码是一种编码技术,其中密文替换预定义系统中的明文单元。 “单元”可以是单个字母(最常见)、字母对、字母三元组或上述组合。通过使用逆替换,接收者解密文本。在替换密码中,我们用不同的字母替换明文字母。

加密消息 - 加密消息需要两个要素:密钥(字母替换)和加密技术(在本例中为简单替换)。请注意,如果我们认为我们的消息不再安全,我们应该继续使用相同的技术(简单替换),但更改密钥(使用替代字母替换)。

解密消息 - 如果你知道密钥,这应该不是问题。无论密文字符按字母顺序排列是否有帮助,密钥对于加密和解密都是相同的。

例如,如果偏移量为 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.