python实现希尔密码加密的示例代码

 更新时间:2021年08月12日 15:27:26   作者:lnjoy  
本文主要介绍了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))  #连接成字符串,输出密文

到此这篇关于python实现希尔密码加密的示例代码的文章就介绍到这了,更多相关python 希尔密码加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 带你一文搞懂Python文件的读写操作

    带你一文搞懂Python文件的读写操作

    读写文件是最常见的IO操作,Python内置了读写文件的函数,下面这篇文章主要给大家介绍了关于Python文件读写操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • tensorflow实现打印ckpt模型保存下的变量名称及变量值

    tensorflow实现打印ckpt模型保存下的变量名称及变量值

    今天小编就为大家分享一篇tensorflow实现打印ckpt模型保存下的变量名称及变量值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python利用matplotlib绘制散点图的新手教程

    Python利用matplotlib绘制散点图的新手教程

    这篇文章主要给大家介绍了关于Python利用matplotlib绘制散点图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python实现的希尔排序算法实例

    python实现的希尔排序算法实例

    这篇文章主要介绍了python实现的希尔排序算法,实例分析了基于Python实现希尔排序的相关技巧,需要的朋友可以参考下
    2015-07-07
  • pyttsx3实现中文文字转语音的方法

    pyttsx3实现中文文字转语音的方法

    今天小编就为大家分享一篇pyttsx3实现中文文字转语音的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Django 拼接两个queryset 或是两个不可以相加的对象实例

    Django 拼接两个queryset 或是两个不可以相加的对象实例

    这篇文章主要介绍了Django 拼接两个queryset 或是两个不可以相加的对象实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python深度学习tensorflow实例数据下载与读取

    python深度学习tensorflow实例数据下载与读取

    这篇文章主要为大家介绍了python深度学习tensorflow实例数据下载与读取示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python实现Event回调机制的方法

    Python实现Event回调机制的方法

    今天小编就为大家分享一篇Python实现Event回调机制的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python3中关于excel追加写入格式被覆盖问题(实例代码)

    python3中关于excel追加写入格式被覆盖问题(实例代码)

    这篇文章主要介绍了python3中关于excel追加写入格式被覆盖问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • python学习之读取配置文件

    python学习之读取配置文件

    这篇文章主要介绍了python学习之读取配置文件,文章基于python的相关资料展开对主题的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04

最新评论