【题目】

1) 实现仿射密码,具体要求:

A. 实现仿射密码加密过程,由用户输入密钥,可以对任意输入的明文进行加密;

B. 根据用户输入的加密密钥,自动生成解密密钥,并能对加密密文进行解密;

C. 实现仿射密码破解程序(穷举),能对任意输入的密文进行解密

【实现代码】

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 17 20:03:09 2017
仿射密码加密, 解密, 破解
@author: HP
"""
from string import ascii_lowercase as lowercase
from string import ascii_uppercase as uppercasefrequencyTable = [4, 19, 14, 0, 13, 8, 17, 18, 7, 3, \11, 2, 20, 12, 15, 24, 22, 6, 1, 21, \10, 23, 9, 16, 25]# 删除预留的标点#文本过滤
def text_filter (text):text = text.lower()result = ""for i in range(len(text)):if lowercase.find(text[i]) != -1:result += text[i]return result#加密部分
def encryption(plaintext, k1, k2):plaintext = text_filter(plaintext)result = ""for i in range(len(plaintext)):index = lowercase.find(plaintext[i])c_index = (k1*index+k2)%26result += uppercase[c_index]return result#解密部分
def get_inverse(a, b): """#求a关于模b的逆元"""if(a==1 and b==0):x = 1y = 0return x, yelse:xx, yy = get_inverse(b, a%b)x = yyy = xx - a//b*yyreturn x, ydef Decryption(k1, k2, ciphertext):k3 = get_inverse(k1, 26)[0]result = ""for i in range(len(ciphertext)):index = uppercase.find(ciphertext[i])p_index = k3*(index- k2)%26result += lowercase[p_index]return result#破解部分
def get_frequencyTable(ciphertext): """返回一个列表;取得密文的字母频率表, 按字母出现频率从大到小排列, 值为字母对应的索引"""#取得字母频率字典count = {}for i in range(len(ciphertext)):count[ciphertext[i]] = count[ciphertext[i]] + 1 if ciphertext[i] in count else 1#把字典转换为列表, 并且对其排序, 最终得到返回值items = count.items()items_list = [[item[1], item[0]]for item in items]items_list1 = sorted(items_list, reverse = True)chara_list = [item[1] for item in items_list1]return list(map(lambda x: uppercase.index(x),chara_list))# 根据a,b,c,d获取密钥K1
def get_k1(a, b, c, d):i = 0while True:k1 = ( float(a - d - 26 * i) / float(b - c) )if k1 < -26 or k1 > 26:return Noneif isinstance(k1, int):return k1i = i + 1def get_abcd(list1, list2):list3 = list(map(lambda x, y: [x, y], list1, list2))result = []for i in range(len(list3)):for j in range(i+1, len(list3)):result.append(list3[i]+list3[j])return resultdef crack():list1 = ['u','v','w']list2 = ['x','y','z']list22 = list(list2)result = []count = 0while count<6:for item in get_abcd(list1, list22):k1 = get_k1(*item)if k1 is None or gcd(k1, 26) != 1:breakk2 = int(d - c * k1) % 26result.append( decryption(Cs, t, k3) )if(count%2==1):first = list2.pop(0)list2.append(first)list22 = list(list2)else:list22[1], list22[2] = list22[2], list22[1]count += 1        if __name__ == '__main__':ciphertext = input("enter the ciphertext: ")print(Decryption(7, 3, ciphertext))

仿射密码之加解密及破解相关推荐

  1. 维吉尼亚密码加解密与破解

    实验目的 1.进一步理解维吉尼亚密码的加解密原理 2.进一步理解维吉尼亚密码的缺陷和利用方法 3.提高编程实践能力 实验要求 1.实现维吉尼亚加解密函数 2.破解维吉尼亚加密的密文 实验步骤 1.维吉 ...

  2. 凯撒密码加解密及破解实现原理

    概念及原理 根据百度百科上的解释,凯撒密码是一种古老的加密算法. 密码的使用最早可以追溯到古罗马时期,<高卢战记>有描述恺撒曾经使用密码来传递信息,即所谓的"恺撒密码" ...

  3. 信息安全之仿射密码加密和解密

    本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...

  4. 基于C++的DES的EBC电子密码本加解密,CBC密码分组链接思想,以及相关流程图

    CBC模式的DES加解密 一.实验内容 学习并完成对称加解密中的DES加解密以及CBC模式的DEC加解密. 二.实验原理 2.1 DES加解密原理 DES算法是一种最通用的对称密钥算法,因为算法本身是 ...

  5. python密码教程_Python实现密钥密码(加解密)实例详解

    密钥密码 """ 如密钥短语密码为: university -> universty 明文: abcdefghijklmnopqrstuvwxyz 密文:jklmo ...

  6. .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法

    参阅 CCFer & TLFer : kanbol 的 Java 代码翻译修改而成: kanbol 说: 之前在TLF写过一个程序自动更新flashfxp的地址簿,也就是修改sites.dat ...

  7. boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密

    作为一名有经验的开发人员,是不习惯将明文直接放在代码中,总觉得有隐患.今天搭建了一个springboot项目,需要集成数据库,调取数据. 在配置 datasource的时候,想要将密码改为密文,连接数 ...

  8. 加脱壳、加解密、破解辅助及其源码

    PE辅助工具 程序名称 作者 说明 PETool v0.45 beta MackT PE文件信息查看编辑工具,VC源码. PE Labs 1.0 Latigo PE文件信息查看工具,Win32ASM源 ...

  9. 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密

    定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...

最新文章

  1. 容器技术 - docker
  2. python读取文本并且替换_lin如何读取和替换python行文件中的文本
  3. abv asp是静态网页吗_2019年seo动态网页优化“指南针”
  4. fixed 定位 苹果手机输入框触发时内容全部隐藏
  5. 好工作为什么会与你擦肩而过?
  6. matlab局部放大的图中图画法
  7. pandas DataFrame 数据处理常用操作
  8. 2020 .NET 开发者峰会顺利在苏州落幕,相关数据很喜人以及线上直播回看汇总
  9. 流量管理系统产品选型常见问答(FAQ)
  10. 脚本语言(确认补遗)
  11. 老板应该如何运用人才?
  12. Android使用SurfaceView实现墨迹天气的风车效果
  13. 第一章:x264视频制作meGUI工具下载
  14. 大数据之Superset
  15. 手写vue日历控件过程
  16. 【CF802O】April Fools‘ Problem (hard)(wqs二分,模拟费用流,老鼠进洞)
  17. sql语句的增删改操作附加代码
  18. 压缩pdf文件到特定大小,pdf格式文件如何压缩到最小
  19. 单片机I/O口的结构的详解
  20. 计算机网络期末复习:第一章概念

热门文章

  1. Java全栈工程师学习
  2. 红外循迹传感器PID循迹算法
  3. 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别
  4. trinity运行原理及常见报错(二)
  5. NMS(Non-Maximum Suppression,非极大值抑制)解析
  6. 详解JSP 中Spring工作原理及其作用
  7. 理解Linux中的进程状态
  8. oracle trace进程,ORACLE SQL_TRACE的使用
  9. Mybatis 批量插入数据 关于Oracle 批量插入
  10. Unity之数据持久化——Json