python密码学简单替代密码解密及测试教程

发布时间:2024-02-11 18:30

目录
  • 简单替代密码
    • 示例
    • 输出
  • 简单替换密码测试
    • 输出
  • 简单替换密码解密
    • 代码

简单替代密码

简单替换密码是最常用的密码,包括为每个密文文本字符替换每个纯文本字符的算法.在这个过程中,与凯撒密码算法相比,字母表是混乱的.

示例

简单替换密码的密钥通常由26个字母组成.一个示例键是 :

plain alphabet : abcdefghijklmnopqrstuvwxyz
cipher alphabet: phqgiumeaylnofdxjkrcvstzwb

使用上述密钥的示例加密是 :

plaintext : defend the east wall of the castle
ciphertext: giuifg cei iprc tpnn du cei qprcni

以下代码显示了一个实现简单替换密码的程序;

import random, sys
LETTERS = \'ABCDEFGHIJKLMNOPQRSTUVWXYZ\'
def main():
   message = \'\'
   if len(sys.argv) > 1:
      with open(sys.argv[1], \'r\') as f:
         message = f.read()
   else:
      message = raw_input(\"Enter your message: \")
   mode = raw_input(\"E for Encrypt, D for Decrypt: \")
   key = \'\'
   
   while checkKey(key) is False:
      key = raw_input(\"Enter 26 ALPHA key (leave blank for random key): \")
      if key == \'\':
         key = getRandomKey()
      if checkKey(key) is False:
print(\'There is an error in the key or symbol set.\')
   translated = translateMessage(message, key, mode)
   print(\'Using key: %s\' % (key))
   
   if len(sys.argv) > 1:
      fileOut = \'enc.\' + sys.argv[1]
      with open(fileOut, \'w\') as f:
         f.write(translated)
      print(\'Success! File written to: %s\' % (fileOut))
   else: print(\'Result: \' + translated)
# Store the key into list, sort it, convert back, compare to alphabet.
def checkKey(key):
   keyString = \'\'.join(sorted(list(key)))
   return keyString == LETTERS
def translateMessage(message, key, mode):
   translated = \'\'
   charsA = LETTERS
   charsB = key
   
   # If decrypt mode is detected, swap A and B
   if mode == \'D\':
      charsA, charsB = charsB, charsA
   for symbol in message:
      if symbol.upper() in charsA:
         symIndex = charsA.find(symbol.upper())
         if symbol.isupper():
            translated += charsB[symIndex].upper()
         else:
            translated += charsB[symIndex].lower()
else:
               translated += symbol
         return translated
def getRandomKey():
   randomList = list(LETTERS)
   random.shuffle(randomList)
   return \'\'.join(randomList)
if __name__ == \'__main__\':
   main()

输出

您可以观察以下内容当你实现上面给出的代码时输出 :

\"python密码学简单替代密码解密及测试教程_第1张图片\"

简单替换密码测试

我们将重点介绍如何使用各种方法测试替换密码,这有助于生成随机字符串,如下面所示 :

import random, string, substitution
def main():
   for i in range(1000):
      key = substitution.getRandomKey()
      message = random_string()
      print(\'Test %s: String: \"%s..\"\' % (i + 1, message[:50]))
      print(\"Key: \" + key)
      encrypted = substitution.translateMessage(message, key, \'E\')
      decrypted = substitution.translateMessage(encrypted, key, \'D\')
      
      if decrypted != message:
         print(\'ERROR: Decrypted: \"%s\" Key: %s\' % (decrypted, key))
         sys.exit()
      print(\'Substutition test passed!\')
def random_string(size = 5000, chars = string.ascii_letters + string.digits):
   return \'\'.join(random.choice(chars) for _ in range(size))
if __name__ == \'__main__\':
   main()

输出

您可以随机观察输出生成的字符串有助于生成随机纯文本消息,如下所示 :

\"python密码学简单替代密码解密及测试教程_第2张图片\"

测试成功完成后,我们可以观察输出消息替换测试通过!.

\"python密码学简单替代密码解密及测试教程_第3张图片\"

因此,您可以系统地破解替换密码.

简单替换密码解密

您可以了解替换密码的简单实现,它根据简单替换密码技术中使用的逻辑显示加密和解密的消息.这可以被视为一种替代编码方法.

代码

您可以使用以下代码使用简单替换密码来执行解密;

import random
chars = \'ABCDEFGHIJKLMNOPQRSTUVWXYZ\' + \\
   \'abcdefghijklmnopqrstuvwxyz\' + \\
   \'0123456789\' + \\
   \':.;,?!@#$%&()+=-*/_<> []{}`~^\"\\\'\\\\\'
def generate_key():
   \"\"\"Generate an key for our cipher\"\"\"
   shuffled = sorted(chars, key=lambda k: random.random())
   return dict(zip(chars, shuffled))
def encrypt(key, plaintext):
   \"\"\"Encrypt the string and return the ciphertext\"\"\"
   return \'\'.join(key[l] for l in plaintext)
def decrypt(key, ciphertext):
   \"\"\"Decrypt the string and return the plaintext\"\"\"
   flipped = {v: k for k, v in key.items()}
   return \'\'.join(flipped[l] for l in ciphertext)
def show_result(plaintext):
   \"\"\"Generate a resulting cipher with elements shown\"\"\"
   key = generate_key()
   encrypted = encrypt(key, plaintext)
   decrypted = decrypt(key, encrypted)   
   print \'Key: %s\' % key
print \'Plaintext: %s\' % plaintext
   print \'Encrypted: %s\' % encrypted
   print \'Decrypted: %s\' % decrypted
show_result(\'Hello World. This is demo of substitution cipher\')

以上就是python密码学简单替代密码解密及测试教程的详细内容,更多关于python替代密码解密测试的资料请关注脚本之家其它相关文章!

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号