网站首页 > 技术教程 正文
简介
希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。
每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。(注意用作加密的矩阵(即密匙)在 必须是可逆的,否则就不可能解码。只有矩阵的行列式和26互质,才是可逆的。)
例子:
用希尔密码对明文串 x = EastChinaNormalUniversity 进行加密,
加密:
密文向量 = 明文向量 * 密钥矩阵 (mod 26)
1. 先将明文串对应英文字母编码表进行数字转化 4 0 18 19 2 7 8 13 0 13 14 17 12 0 11 20 13 8 21 4 17 18 8 19 24
我去,发现少了一个,老师出题就不能凑个整吗??? 这样子,我们做补0处理。
2. 接下来开始加密
得到密文矩阵后,按照分组对应的向量转成字母:
IK BX NB DH NN JD YE SR OB KB UJ HL W
python实现:
import numpy as np
def encode(string, size):
# 转换小写字母
if not string.islower():
string = string.lower()
# 分成 size个 字的分段
blocks = [string[i:i+size] for i in range(0, len(string), size)]
# 明文字串与密钥矩阵阶数不整除。。字串补a
if len(blocks[-1]) != size:
blocks[-1] = blocks[-1].ljust(size,'a')
# 将 a-z 编码为 0-25
temp = np.array([list(map(ord, block)) for block in blocks]) - ord('a')
# print(temp)
return temp
def analysis(crypter, code):
return ((crypter @ code.T) % 26).T + ord('a')
# 要加密的信息
encode_msg = 'eastchinanormaluniversity'.lower()
print('待加密的信息:'+encode_msg)
# 密钥
encryption_matrix = np.array([[2, 5], [9, 5]])
print('密钥:')
print(encryption_matrix)
# 加密代码
encrypted_code = analysis(encryption_matrix, encode(encode_msg, 2))
# 密文
Decryption_matrixtext = ''.join(map(chr, encrypted_code.ravel()))
print("密文:" + Decryption_matrixtext[:len(encode_msg)].upper())
"""
待加密的信息:eastchinanormaluniversity
密钥:
[[2 5]
[9 5]]
密文:IKBXNBDHNNJDYESROBKBUJHLW
"""
解密:
不会求逆的参考:同余方程、欧拉函数、乘法逆元、定义在Zm上的矩阵求逆
解密和加密类似,先通过刚刚的方法计算出 模 m 的逆矩阵,然后用 A?1 再进行解密:
分析与破解
例子:
假设已知明文friday利用n=2的希尔密码加密,得到密文VYUZSM,求秘钥K.
n等于2,说明把friday分成3段,矩阵是2*2的
根据字母与整数的对应关系:
(5,17)---->(21,24),
(8,3)---->(20,25),
(0,24)—>(18,12),得到
用(0,24)—>(18,12)验证K:
正确!得到密钥K就随便破解密文了
猜你喜欢
- 2024-10-16 机器学习中应用的范数 机器学习中常见的超参照数调整
- 2024-10-16 有限元求解:结构应力法如何实现的网格不敏感呢?
- 2024-10-16 论利用粒子群算法求解测距定位方程
- 2024-10-16 推荐系统多样性——DPP篇 推荐系统的模型
- 2024-10-16 线性代数主要可以从几个角度去理解: (1)线性方程...
- 2024-10-16 numpy入门 day05 numpy eig
- 2024-10-16 python多进程矩阵计算的应用示例 python多进程队列
- 2024-10-16 计量课后5.4(大数据202230906137 HSl)
- 2024-10-16 TensorFlow 2:使用自编码器进行插值
- 2024-10-16 Matlab矩阵的简单操作 matlab如何进行矩阵运算
你 发表评论:
欢迎- 05-05从virsh当中学习QEMU/KVM启动命令
- 05-05Win10 BCD文件损坏怎么修复?(bcd文件损坏win7)
- 05-05亚马逊春节假期期间的店铺管理设置
- 05-051分钟总结常用k8s常用诊断教程(k8s常见故障)
- 05-05VisiPics重复图片查找软件中文汉化教程
- 05-05微服务的发布实现方式1灰度实现(微服务实现原理)
- 05-05轻松掌握Java多线程 - 第二章:线程的生命周期
- 05-05德拉诺之王邪DK报告:PVE向小测试及分析
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)