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

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

简单替代密码

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

示例

简单替换密码的密钥通常由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()

输出

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

简单替换密码测试

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

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()

输出

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

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

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

简单替换密码解密

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

代码

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

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替代密码解密测试的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python密码学仿射密码及攻击单字母密码教程

    目录 仿射密码 代码 输出 单字母密码 输出 仿射密码 Affine Cipher是Multiplicative Cipher和Caesar Cipher算法的组合. 仿射密码的基本实现如下图所示 : 我们将通过创建包含两个加密和解密基本函数的相应类来实现仿射密码. 代码 您可以使用以下代码实现仿射密码 :  class仿射(对象):  DIE = 128   KEY =(7,3,55)  def __init __(self): #传递  def encryptChar(self,char):

  • python密码学Base64编码和解码教程

    目录 Base64编码 编码程序 输出 解码程序 输出 差异在ASCII和base64之间 缺点 Base64编码 Base64编码将二进制数据转换为文本格式,通过通信通道传递,用户可以安全地处理文本. Base64也称为隐私增强电子邮件(PEM),主要用于电子邮件加密过程. Python包含一个名为 BASE64的模块其中包括下面给出的两个主要功能 : base64.decode(输入,输出) : 它解码指定的输入值参数并将解码的输出存储为对象. Base64.encode(输入,输出) ;它

  • python密码学实现文件加密教程

    目录 代码 输出 说明 在Python中,可以在传输到通信通道之前加密和解密文件.为此,您必须使用插件 PyCrypto .您可以使用下面给出的命令安装此插件. pip install pycrypto 代码 用密码保护器加密文件的程序代码在下面提到 : # =================Other Configuration================ # Usages : usage = "usage: %prog [options] " # Version Version

  • Python密码学XOR算法编码流程及乘法密码教程

    目录 XOR算法 代码 输出 说明 乘法密码 Python中乘法密码的基本调制函数如下: 在本章中,让我们了解XOR过程及其在Python中的编码以及乘法密码的教程 XOR算法 XOR算法的加密和解密转换ASCII字节格式的纯文本,并使用XOR过程将其转换为指定的字节.它为用户提供以下优势 : 快速计算 没有区别标记左侧和右侧 易于理解和分析 代码 您可以使用以下代码执行XOR过程 : def xor_crypt_string(data, key = 'awesomepassword', enc

  • python密码学文件解密实现教程

    目录 代码 输出 在本章中,我们将讨论使用Python解密加密文件.请注意,对于解密过程,我们将遵循相同的过程,但不是指定输出路径,而是关注输入路径或加密的必要文件. 代码 以下是使用Python解密加密文件的示例代码; #!/usr/bin/python # ---------------- READ ME --------------------------------------------- # This Script is Created Only For Practise And E

  • python密码学各种加密模块教程

    目录 加密模块 代码 输出 说明 在本章中,您将详细了解Python中各种加密模块. 加密模块 它包含所有配方和基元,并在Python中提供高级编码接口.您可以使用以下命令安装加密模块 : pip install cryptography 代码 您可以使用以下代码实现加密模块 : from cryptography.fernet import Fernet key = Fernet.generate_key() cipher_suite = Fernet(key) cipher_text = c

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

    目录 简单替代密码 示例 输出 简单替换密码测试 输出 简单替换密码解密 代码 简单替代密码 简单替换密码是最常用的密码,包括为每个密文文本字符替换每个纯文本字符的算法.在这个过程中,与凯撒密码算法相比,字母表是混乱的. 示例 简单替换密码的密钥通常由26个字母组成.一个示例键是 : plain alphabet : abcdefghijklmnopqrstuvwxyz cipher alphabet: phqgiumeaylnofdxjkrcvstzwb 使用上述密钥的示例加密是 : plai

  • python密码学RSA密码解密教程

    目录 授权 身份验证 RSA密码解密 本章是前一章的延续,我们使用RSA算法逐步实现加密,并详细讨论它. 用于解密密文的函数是as跟随 : def decrypt(ciphertext, priv_key):    cipher = PKCS1_OAEP.new(priv_key)    return cipher.decrypt(ciphertext) 对于公钥加密或非对称密钥加密,重要的是要保持两个重要的功能,即身份验证和授权. 授权 授权是确认发件人是唯一发送邮件的人的过程.以下代码解释了

  • Appium+Python实现简单的自动化登录测试的实现

    前言 要想让手机app自动登录,也就是让app自己操作.所以在脚本中我们需要对app控件进行操作,那么我们需要获取控件的信息.可以使用..\android-sdk-windows\tools目录下的uiautomatorviewer.bat来获取控件相关信息 获取控件相关信息 启动uiautomatorviewer.bat 打开手机app,例如计算器,USB连接电脑,点击uiautomatorviewer左上角的安卓机器人按钮Devices Screenshot按钮刷新页面 定位元素:移动鼠标到

  • Python OpenCV简单的绘图函数使用教程

    目录 1.画直线的函数是cv2.line 2.画矩形的函数是cv2.rectangle 3.画圆函数是cv2.circle 4.画椭圆的函数是cv2.elipes 5.画多边形的函数是cv2.polylines 6.添加文字的函数是cv2.putText 1.画直线的函数是cv2.line cv2.line函数语法: cv2.line(img,start_point,end_point,color,thickness=0) cv2.line函数参数解释: img:需要画的图像 start_poi

  • python实现简单加密解密机制

    本文使用python实现一个简单的加密解密机制. 描述:结合26个字母.以一个单词作为秘钥,使用python实现简单的加密解密机制 秘钥:大写的英文字符串 明文:包含空格.大小写字母.数字等的字符串 代码实现: # -*- coding: utf-8 -*- import os,sys reload(sys) sys.setdefaultencoding('utf8') import string def suanfa(key): alp = 'ABCDEFGHIJKLMNOPQRSTUVWXY

  • 利用python实现简单的情感分析实例教程

    目录 1 数据导入及预处理 1.1 数据导入 1.2 数据描述 1.3 数据预处理 2 情感分析 2.1 情感分 2.2 情感分直方图 2.3 词云图 2.4 关键词提取 3 积极评论与消极评论 3.1 积极评论与消极评论占比 3.2 消极评论分析 总结 python实现简单的情感分析 1 数据导入及预处理 1.1 数据导入 # 数据导入 import pandas as pd data = pd.read_csv('../data/京东评论数据.csv') data.head() 1.2 数据

  • 用Python制作简单的钢琴程序的教程

    录一段音频,把它的音高改变50次并把每一个新的音频匹配到键盘的一个键位,你就能把电脑变成一架钢琴! 一段音频可以被编码为一组数值的数组(或者列表),像这样: 我们可以在数组中每隔一秒拿掉一秒的值来将这段音频的速度变成两倍. 如此我们不仅将音频的长度减半了,而且我们还将它的频率翻倍了,这样使得它拥有比原来更高的音高(pitch). 相反地,假如我们将数组中每个值重复一次,我们将得到一段更慢,周期更长,即音高更低的音频: 这里提供一个可以按任意系数改变音频速度的任意简单的Python函数: impo

  • python密码学换位密码及换位解密转置加密教程

    目录 换位密码 示例 代码 解释 输出 Pyperclip 代码 输出 解释 解密转置密码的步骤. 代码 说明 输出 换位密码 Transposition Cipher是一种加密算法,其中明文中的字母顺序被重新排列以形成密文.在此过程中,不包括实际的纯文本字母. 示例 转置密码的一个简单示例是柱状转置密码其中纯文本中的每个字符都是水平写入的,具有指定的字母宽度.密码是垂直写入的,它创建了一个完全不同的密文. 考虑纯文本 hello world ,让我们应用简单的柱状转置技术,如图所示在 纯文本字

随机推荐