仿射密码(Affine)
仿射密码(Affine)
加密对象: 英文字母
原理:
a b c d e f g h i j k l m n o p q r s t u v w x y z 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 代码:
# write by 2021/6/28DIC = "abcdefghijklmnopqrstuvwxyz"# 辗转相除法 def gcd(a, b):a, b = b, a % b# print(a, b)if b == 0:return aelse:return gcd(a, b)# 扩展欧几里得算法 def exgcd(a, b):if b == 0:return 1, 0x, y = exgcd(b, a % b)return y, x-(a//b)*ydef encrypt_affine(string, a, b):ciphertext = ""if gcd(a, 26) != 1 and gcd(a, 26) != -1:return -1for i in string.lower():if i not in DIC:ciphertext += ielse:ciphertext += DIC[(a*DIC.index(i)+b) % 26]return ciphertext# 直接遍历所有26可能,找到为止 def decrypt2_affine(string, a, b):plaintext = ""if gcd(a, 26) != 1 and gcd(a, 26) != -1:return -1for i in string.lower():if i not in DIC:plaintext += i# (x*7+3)%26 = 4else:for x in range(26):if (x*a + b) % 26 == DIC.index(i):# print("x=", x)plaintext += DIC[x]breakreturn plaintext# 根据扩展欧几里得算法找到乘法逆元,在求解 def decrypt_affine(string, a, b):plaintext = ""if gcd(a, 26) != 1 and gcd(a, 26) != -1:return -1a_26_inv = exgcd(a, 26)[0]for i in string:if i not in DIC:return -1plaintext += DIC[a_26_inv*(DIC.index(i)-b) % 26]return plaintextif __name__ == '__main__':# print(exgcd(3, 26))a, b = 2, 21ciphertext_ = encrypt_affine("AFFINECIPHER", a, b)plaintext_ = decrypt_affine(ciphertext_, a, b)plaintext_2 = decrypt2_affine(ciphertext_, a, b)print(f"{plaintext_}: {ciphertext_}")print(f"{plaintext_2}: {ciphertext_}")
仿射密码(Affine)相关推荐
- java仿射密码加解密实现,仿射密码-Affine cipher
[实例简介] 题目:课程设计 环境:Visual C++ 6.0 仿射密码是由加法密码和乘法密码结合就构成. 仿射密码的加密和解密算法是: C= Ek(m)=(k1m+k2) mod n M= Dk( ...
- 加密解密工具 之 仿射密码
仿射密码(Affine Cipher)为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母. 仿射密码是一种替换密码.它是一个字母对一个字母的. 因为仿射密码仍为单字母表 ...
- 【密码学原理与实践】(三)仿射密码 符java代码实现
仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...
- 仿射密码解密(Affine Cipher)
仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C D E F G H I J K L M N O P Q R S T U V ...
- 古典密码----仿射密码加解密
理论部分 仿射密码是移位密码的一个推广,其加密过程不仅包含移位操作,而且使用了乘法运算.与移位密码相同,仿射密码的明文空间M和密文空间C均为Z26,因此,在使用仿射密码体制对英文消息进行加密之前,需要 ...
- 实验2 仿射密码算法
[一.实验目的] 通过实验熟练掌握仿射密码算法的加密解密过程,加深对古典密码体制的了解,为深入学习密码学奠定基础. [二.实验原理] 设两个整数α和β,及gcd(α,26)=1, 加密过程:x → α ...
- 密码学基础--仿射密码
在仿射密码中,加密函数定义为: e(x)=(ax+b)mod26 a,bZ.因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码(可以看出,当a=1时,其对应的正是移位密码). 为了能对密 ...
- 仿射密码(原理+代码)
仿射密码 目录 1.原理: 2.流程图 3.编程实现 4.总结 1.原理: 仿射密码是一种单表代换的对称密码.明文中所有字母对应成数值,经过加密函数加密成新的数值,再对应到相应的字母, ...
- 仿射密码及c++实现
仿射函数(affine) 所谓仿射函数,是指满足如下条件的函数 在域中,有函数映射,c=ax+b,其中a有逆元,也就是x有唯一解. 一般来说,仿射函数定义在有限的数域中.古典密码的仿射函数是 c = ...
最新文章
- GitHub的十大JavaScript项目
- mysql中文乱码解决方案_关于MySQL中文乱码的完美解决方案
- Angularjs中文教程
- 1131: 零起点学算法38——求阶乘和
- Hadoop Yarn生产环境核心配置参数
- BZOJ 3144 [Hnoi2013]切糕
- 如何使用Elasticsearch,Logstash和Kibana实时可视化Python中的日志
- 《 双城记 》:无数的平民拥有的只是和她同样的眼睛 ...
- 【计算机组成原理】零碎知识归纳总结
- jQuery+CSS五类验证码(字母、数字、滑动、点击)
- flutter 推荐插件:path_provider
- Iphone开发Interface Builder出现Assertion Failure错误
- Shell 脚本执行错误 $‘\r‘:command not found
- Graphics进行局部旋转的办法
- Axure 9怎么导入阿里巴巴矢量图标的Iconfont图标
- 咖啡产地及如何鉴赏评价
- Windows 7 插件KB4474419安装 Symantec Endpoint Protection 只能安装在具有SHA-2代码签名支持更新(KB4474419)的系统上
- Java后台校验修改密码强度工具类
- 3d打印机品牌排行榜揭晓,stratasys公司名列前茅
- CPU性能衡量参数-主频,MIPS,CPI,时钟周期,机器周期,指令周期