python实现希尔密码加密的示例代码
作者:lnjoy 发布时间:2022-06-16 07:55:31
标签:python,希尔密码加密
原理
希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。
每个字母当作26进制数字:A=0, B=1, C=2… 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。(注意用作加密的矩阵(即密匙)在 必须是可逆的,否则就不可能解码。只有矩阵的行列式和26互质,才是可逆的。)
实现
希尔密码是运用基本矩阵论原理的替换密码,使用一个m*m的矩阵作为密钥,此矩阵必须可逆,解密使用逆矩阵解密。
加密: 密文向量 = 密钥矩阵 * 明文向量 (mod 26)
解密:明文向量 = 密钥矩阵逆矩阵 * 密文向量 (mod 26)
使用numpy库的矩阵对象,可以十分方便地进行矩阵乘法,矩阵求逆和取模等运算。
import numpy as np
m = 'YOURPINNOISFOURONETWOSIX' #明文
a = np.matrix([[11,2,19],[5,23,25],[20,7,17]]) #密钥LCTFXZUHR
num_m = []
temp = []
count = 1
for i in m: #将明文分为三个一组
temp.append(ord(i)-ord('A'))
if count % 3 == 0:
num_m.append(temp)
temp = []
count += 1
mat_m = [np.matrix(i).T for i in num_m] #将明文分组转换为向量形式
mat_c = [a * i % 26 for i in mat_m] #得到密文分组的向量形式
num_c = []
temp = []
for i in mat_c: #将密文向量转换为列表形式,且合并到一个列表
temp = i.tolist()
for j in range(3):
num_c.append(temp[j][0])
c = [chr(i+ord('A')) for i in num_c]
print(''.join(c)) #连接成字符串,输出密文
来源:https://blog.csdn.net/qq_43531895/article/details/106305244
0
投稿
猜你喜欢
- pygame对键盘的连续监听,供大家参考,具体内容如下大家请看下面这一段代码:for event in pygame.event.get()
- Serializer序列化器定义Serializer1. 定义方法Django REST framework中的Serializer使用类来
- 【导读】亚马逊的 Alexa 的巨大成功已经证明:在不远的将来,实现一定程度上的语音支持将成为日常科技的基本要求。整合了语音识别的 Pyth
- 前言lambda是表达式,用于创建匿名函数,可以和filter、map、reduce配合使用。本文环境Python3.7。一、lambda表
- ------谁正在访问数据库?Select c.sid, c.serial#,c.username,a.object_id,b.
- 一、读取Excel文件使用pandas的read_excel()方法,可通过文件路径直接读取。注意到,在一个excel文件中有多个sheet
- 定义本地站点在Dreamweaver中制作网站,您必须定义一个本地站点,它是您的计算机上任意位置的一个
- 一、模块简介Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档
- 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑总结出来的,
- 本文采用OpenCV3和Python3 来实现静态图片的人脸识别,采用的是Haar文件级联。 首先需要将OpenCV3源代码中找到data文
- 最近一句话后门不断升级大家注意防范,基本上多事字符替换过护卫神PHP一句话作者:小东 <?php $a = str_replace(x
- 本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下:#encoding=utf-8#author: w
- /** * 返回一个随机的小写字母 */ function getLowerCharacter(){ return getCharacter
- 前言在启动 Django 项目时,Django 默认监听的端口号为 8000,设置的默认 IP 地址为 127.0.0.1 。如果需要修改默
- getatter()通过方法名字符串调用方法,这个方法最主要的作用就是实现反射机制,也就是说可以通过字符串获取方法实例,这样就可以把一个类可
- <html> <head> <title>biyuan给大家拜年了!</title> <
- 要知道我们程序猿也是需要浪漫的,小博我之前在网上搜寻了很多代码,确发现好多都不是最新的,所以自己就整理了一下代码,现在与广大博友们分享下我们
- NumPy广播(Broadcast),广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的
- 原作者:Nik Piepenbreier翻译&内容补充:费弗里原文地址:https://towardsdatascience.com
- 模式库在模式库里,我将列出所有电子商务网站需要的模式.以下将罗列出经典常用的模式案例,我也试图让这些模式看起来更有趣味性与实用性。(Yaho