仿射密码之加解密及破解
【题目】
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.进一步理解维吉尼亚密码的加解密原理 2.进一步理解维吉尼亚密码的缺陷和利用方法 3.提高编程实践能力 实验要求 1.实现维吉尼亚加解密函数 2.破解维吉尼亚加密的密文 实验步骤 1.维吉 ...
- 凯撒密码加解密及破解实现原理
概念及原理 根据百度百科上的解释,凯撒密码是一种古老的加密算法. 密码的使用最早可以追溯到古罗马时期,<高卢战记>有描述恺撒曾经使用密码来传递信息,即所谓的"恺撒密码" ...
- 信息安全之仿射密码加密和解密
本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...
- 基于C++的DES的EBC电子密码本加解密,CBC密码分组链接思想,以及相关流程图
CBC模式的DES加解密 一.实验内容 学习并完成对称加解密中的DES加解密以及CBC模式的DEC加解密. 二.实验原理 2.1 DES加解密原理 DES算法是一种最通用的对称密钥算法,因为算法本身是 ...
- python密码教程_Python实现密钥密码(加解密)实例详解
密钥密码 """ 如密钥短语密码为: university -> universty 明文: abcdefghijklmnopqrstuvwxyz 密文:jklmo ...
- .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法
参阅 CCFer & TLFer : kanbol 的 Java 代码翻译修改而成: kanbol 说: 之前在TLF写过一个程序自动更新flashfxp的地址簿,也就是修改sites.dat ...
- boot数据加解密 spring_springboot项目使用druid对数据库密码的加解密
作为一名有经验的开发人员,是不习惯将明文直接放在代码中,总觉得有隐患.今天搭建了一个springboot项目,需要集成数据库,调取数据. 在配置 datasource的时候,想要将密码改为密文,连接数 ...
- 加脱壳、加解密、破解辅助及其源码
PE辅助工具 程序名称 作者 说明 PETool v0.45 beta MackT PE文件信息查看编辑工具,VC源码. PE Labs 1.0 Latigo PE文件信息查看工具,Win32ASM源 ...
- 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密
定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...
最新文章
- 容器技术 - docker
- python读取文本并且替换_lin如何读取和替换python行文件中的文本
- abv asp是静态网页吗_2019年seo动态网页优化“指南针”
- fixed 定位 苹果手机输入框触发时内容全部隐藏
- 好工作为什么会与你擦肩而过?
- matlab局部放大的图中图画法
- pandas DataFrame 数据处理常用操作
- 2020 .NET 开发者峰会顺利在苏州落幕,相关数据很喜人以及线上直播回看汇总
- 流量管理系统产品选型常见问答(FAQ)
- 脚本语言(确认补遗)
- 老板应该如何运用人才?
- Android使用SurfaceView实现墨迹天气的风车效果
- 第一章:x264视频制作meGUI工具下载
- 大数据之Superset
- 手写vue日历控件过程
- 【CF802O】April Fools‘ Problem (hard)(wqs二分,模拟费用流,老鼠进洞)
- sql语句的增删改操作附加代码
- 压缩pdf文件到特定大小,pdf格式文件如何压缩到最小
- 单片机I/O口的结构的详解
- 计算机网络期末复习:第一章概念
热门文章
- Java全栈工程师学习
- 红外循迹传感器PID循迹算法
- 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别
- trinity运行原理及常见报错(二)
- NMS(Non-Maximum Suppression,非极大值抑制)解析
- 详解JSP 中Spring工作原理及其作用
- 理解Linux中的进程状态
- oracle trace进程,ORACLE SQL_TRACE的使用
- Mybatis 批量插入数据 关于Oracle 批量插入
- Unity之数据持久化——Json