仿射密码实验 |
您所在的位置:网站首页 › python字符加密2编程 › 仿射密码实验 |
文章目录
前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块
实验结果实验心得实验源码scirpt.pyusefile.py
前言
实验目的 1)初步了解古典密码 2)掌握仿射密码的实现 实验方法 根据下图仿射密码(变换)加解密的描述,用所熟悉的语言,完成实验内容、描述实验操作步骤、实验结果与实验心得。 实验环境 计算机语言:Python 开发环境:Pycharm 原理 在main主程序里,需要有相应的功能提示 作为菜单栏使用 不同的数字对应实现不同的功能:1加密2解密3文件形式加解密4退出程序 需求有:提示输入明文和密钥,对明文进行仿射密码方式的加密,最后输出 m接收用户输入的明文 c作为数组来存储,a和b就是密钥需要用户提供 对于输入的a和b需整形化,然后判断a、b是否互素通过ab的最大公因数是否为1判断 若不互素则提示用户重新输入 达成互素条件后 首先采用正则表达式处理一下用户输入一些特殊符号 (如果不处理的话,那么形成的密文最后也是解密不了的) 接着采用replace去除空格 进入encrypt模块 在这个模块中,原理就是将之前用户输入的参数m,a,b传入 然后通过先转化成ascii码和进行模运算,这里计算得到的ascii码chr后,得到的是大写的英文字母,为此最后输出的时候提供给用户两种结果:大写和小写 3.编写解密模块首先提示输入密文,考虑之前我们加密后的结果一般都是只有英文字母的组合 这里我就只有进行大小写的处理 提示用户是否知道密钥,若有则接受参数a和b,同样得判断a,b是否互素来确认密钥的合法性 然后由a计算出k,再传入decrypt模块解密 解密其实就是加密数学上的逆运算 这里刚刚好相反,通过一系列计算得到的是一串小写英文字母 那与之前一样,我们需要给用户提供大写和小写的结果 假如选择不知道密钥的话,那么就是采用暴力破解 也就是数字组合一个个试,这里通过对仿射原理的理解便可以缩小点范围 定义的la数组和lb数组分别如图
密钥的输入 互素条件的判断 文件解密 主函数模块 开始使用程序 运行script.py 输入数字1
还原成功,是明文hello 这里是提供了密钥,如果暴力破解就是和之前script文件中一致 实验心得作为古典密码的一种,仿射密码的原理其实挺简单的,所以这次使用python来实现关于仿射密码的加解密难度不大,中间遇到的一些问题还是让我收获不少:加解密时要注意英文字母大小写、特殊符号需要处理、chr和ord的配合使用、编写不同的函数模块和文件来实现CLI版的功能等等,让我对于python的使用更加的得心应手。 很喜欢python的话语:人生苦短,我用python。 希望之后继续使用python解决有关密码学的问题。 实验源码 scirpt.py # 暴力破解 import usefile as u import re la = [1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25] lb = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] # 最大公约数 def gcd(a, b): while b != 0: tem = a % b a = b b = tem return a # 加密 def encrypt(m, c, a, b): for i in range(len(m)): # 加密成相应的大写字母 c.append(chr(((ord(m[i]) - 97) * a + b) % 26 + 65)) d = ''.join(c) print(d,"或 {}".format(d.lower())) # 求逆元 def niyuan(a, b): ny = 1 while (a * ny) % b != 1: ny += 1 return ny # 解密 def decrypt(c, k, b): mw = [] for i in range(len(c)): tem = ord(c[i]) - 65 - b if tem |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |