想了一下,还是发出来吧。这是我们这学期的第一次密码学作业,要求用古典密码组合出一个加密算法,如果这对你来说也是作业,请记得修改。

# 置换密码加密
def shift_encrypt(m, key):l = len(key)c = ""for i in range(0, len(m), l):tmp_c = [""] * lif i+l > len(m):tmp_m = m[i:]else:tmp_m = m[i:i+l]for j in range(len(tmp_m)):tmp_c[int(key[j]) - 1] = tmp_m[j]c += "".join(tmp_c)return c# 置换密码解密
def shift_decrypt(c, key):l = len(key)m = ""for i in range(0, len(c), l):tmp_m = [""] * lif i+l >= len(c):tmp_c = c[i:]re_key = []for j in range(len(tmp_c)):re_key.append(int(key[j])-1)re_key.sort()for j in range(len(tmp_c)):tmp_m[j] = tmp_c[re_key.index(int(key[j])-1)]else:tmp_c = c[i:i+l]for j in range(len(tmp_c)):tmp_m[j] = tmp_c[int(key[j]) - 1]m += "".join(tmp_m)return m# 仿射密码加密
def affine_encrypt(m, key):tmp = []c = ''for i in m:# 将字符转为ASCII码然后进行仿射加密,加密结果再mod26i = ((ord(i)-97)*key[0] + key[1]) % 26j = chr(i+97)       # 再将ASCII码转回字符tmp.append(j)for i in tmp:c = c + ireturn c# 仿射密码解密
def ex_gcd(a, b, arr): # 扩展欧几里得求公约数if b == 0:arr[0] = 1arr[1] = 0return ag = ex_gcd(b, a%b, arr)t = arr[0]arr[0] = arr[1]arr[1] = t - int(a/b) * arr[1]return g
def mod_reverse(a, n): # ax=1(mod n) 求a模n的乘法逆xarr = [0,1]gcd = ex_gcd(a,n,arr)if gcd == 1:return (arr[0] % n + n) % nelse:return -1
def affine_decrypt(c, key):tmp = []m = ''inverse = mod_reverse(key[0], 26)   # 逆元for i in c:i = (inverse * ((ord(i)-97)-key[1])) % 26j = chr(i+97)tmp.append(j)for i in tmp:m = m + ireturn m# 最终加密
m = input("请输入待加密的字符串:")
key1 = '3142'       # 置换密码的密钥   ABCD ---> BDAC
key2 = [11,5]       # 仿射密码的密钥
c1 = shift_encrypt(m, key1)
c2 = shift_encrypt(c1, key1)
c3 = affine_encrypt(c2, key2)
print("加密结果为:", c3)# 最终解密
c = input("请输入待解密的字符串:")
m1 = affine_decrypt(c, key2)
m2 = shift_decrypt(m1, key1)
m3 = shift_decrypt(m2, key1)
print("解密结果为:", m3)

Python实现简单的密码设计(基于古典密码)相关推荐

  1. python自动化测试-简单实现接口自动化测试(基于python)

    原标题:简单实现接口自动化测试(基于python) 一.简介 本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测 ...

  2. 手把手教你使用Python解决简单的zip文件解压密码

    简介 使用的核心模块是python标准库中的zipfile模块.这个模块可以实现zip文件的各种功能,具体可以查看官方参考文档.这里的暴力破解的意思是对密码可能序列中的值一个一个进行密码尝试,这对人来 ...

  3. 古典密码算法 java_古典密码算法的实现

    1.古典密码可以分为代替密码和置换密码两种,这里实现了代替密码中的仿射变换和置换密码中的换位变换. 2.仿射变换: 加密过程:e(x) = ax + b (mod m) 解密过程:d(e(x)) = ...

  4. mysql与python交互(简单版表设计)

    准备数据 创建数据表 – 创建 "京" 数据库 create database jing_dong charset=utf8; – 使用 "京" 数据库 use ...

  5. [python自动化]简单实现接口自动化测试(基于python+unittest)

    简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自 ...

  6. 计算机组成原理实验项目2 简单功能型处理器设计 —— 基于MIPS 32位指令集

    单周期CPU实验: 完成本次实验最重要的策略是参考CPU的流程图: 通过流程图,我们可以发现一共要实现五个部分,并且流程图给出了关键电线的定义. 电线的定义:  与寄存器接口有关的: 在原本提供的三 ...

  7. 【MATLAB实验】数学实验实验求根问题三种方法、积分画图及古典密码设计(二分法、牛顿法、不动点迭代法)

    目录 特征值与特征向量 求最简型 编程题 求积分问题(quad.trapz.int) 求根问题(二分法.不动点迭代法.牛顿法) 1.二分法: 2.不动点迭代法 3.牛顿切线法 画图题 画螺旋曲线图 画 ...

  8. matlab实验shi,matlab 实验六 古典密码与破译

    实验六 古典密码与破译 保密通讯在军事.政治.经济斗争和竞争中的重要性是不言而喻的. 在斗争或竞争中,一方要将信息传递给己方的接收者,同时又要防止其他人(特别是敌方)知道信息的内容.他采用的一种方式是 ...

  9. 有趣的密码学介绍~古典密码之凯撒密码来咯~

    游说万乘苦不早,著鞭跨马涉远道.仰天大笑出门去,我辈岂是蓬蒿人! 文章目录 前言 正文 古典密码 一.古典密码概述介绍 1.置换密码 2.代换密码 二.古典密码分类介绍 1.置换密码 2.编辑本段代换 ...

最新文章

  1. Grafana中多租户设置
  2. 【Android】launcher启动参数
  3. 向上传文件服务器,向服务器上传文件
  4. 156 - Ananagrams
  5. 如何找到下一个快手头条?赚他个1000万!
  6. 图解 利用vue-cli 脚手架创建项目
  7. 使用PHP对word文档进行操作的方法
  8. 数据结构(JAVA)--图
  9. PHP中ob系列函数讲解(浏览器缓存技术)
  10. 【java学习之路】(java SE篇)009.IO
  11. [bzoj1468][poj1741]Tree_点分治
  12. python实现局域网内传输文件
  13. 一块硬盘做服务器,服务器4块硬盘做raid几
  14. 谭浩强第五版课后习题答案-----第三章
  15. 计算机睡眠和休眠的区别win10,教你Win10电脑休眠和睡眠的区别
  16. APUE---chap8(进程控制)---8.11(setuid/getuid)
  17. Mac 苹果电脑创建一个新的管理员账号
  18. 树莓派开始,玩转Linux21:进程的生与死
  19. 华美天气(数据来源:和风天气 API)
  20. 安卓平板隐藏虚拟按键_实现安卓设备虚拟按键隐藏和显示的方法和系统的制作方法...

热门文章

  1. bO耳机软件_如何通过飞瓜B站快速搜索定位B站热门视频?
  2. flutter 屏幕尺寸适配 字体大小适配,android面试常用算法
  3. 【视觉SLAM十四讲】李群与李代数
  4. sqlalchemy migrate
  5. 按钮组大总结,赶紧收着《二》
  6. 山东淄博烧烤火出圈儿,文旅局长你是懂项目管理的
  7. 我的电脑我做主计算机组装维护,定时关机2009,我的电脑我做主
  8. 北邮和西电真的厉害,看到许多985的喊0 offer,同时也看到一大堆北邮西电的人秀出高薪offer...
  9. 北邮 计算机组成原理
  10. 新疆计算机应用能力考试,新疆维吾尔自治区中等职业学校计算机应用能力等级考试sual Basic语言程序设计机试试卷(A卷)...