简介

希尔密码是运用基本矩阵论原理的替换密码,由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 npdef encode(string, size):# 转换小写字母if not string.islower():string = string.lower()# 分成 size个 字的分段blocks = [string[i:i+size] for i in range(0, len(string), size)]# 明文字串与密钥矩阵阶数不整除。。字串补aif len(blocks[-1]) != size:blocks[-1] = blocks[-1].ljust(size,'a')# 将 a-z 编码为 0-25temp = np.array([list(map(ord, block)) for block in blocks]) - ord('a')
#     print(temp)return tempdef 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 再进行解密:

求逆矩阵的方法:

实际二阶矩阵的逆矩阵就是:

mod 26后 ,然后用上述相同的方法转换成明文串即可。

分析与破解

例子:
假设已知明文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就随便破解密文了

希尔密码的加密、解密与破解相关推荐

  1. 用户密码的加密解密操作(前端加密,后端解密)

    用户密码的加密解密操作 作者是个小菜狗,行文过程基本都基于自己理解,没有深入查阅文献,如有错误,还请大神指出 背景: 公司做的是一个某某平台的系统,包括前台和后台,作者刚毕业,刚开始试用,带我的师傅让 ...

  2. 凯撒密码的加密解密算法实现

    用C++实现凯撒密码的加密解密算法 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术. 它是一种替换加密的技术,明文中的所 ...

  3. Visual Studio 2019下用 C# 实现 Hill2 二阶希尔密码 的加密、解密 GUI界面

    1.什么是Hill2 什么是Hill密码 希尔密码(Hill)使用每个字母在字母表中的顺序作为其对应的数字,即 A=0,B=1,C=2 等,然后将明文转化为 n 维向量,跟一个 n × n 的矩阵相乘 ...

  4. 将 Shiro 作为应用的权限基础 五:密码的加密/解密在Spring中的应用

    2019独角兽企业重金招聘Python工程师标准>>> 考虑系统密码的安全,目前大多数系统都不会把密码以明文的形式存放到数据库中. 一把会采取以下几种方式对密码进行处理 密码的存储 ...

  5. 仿射密码之加解密及破解

    [题目] 1) 实现仿射密码,具体要求: A. 实现仿射密码加密过程,由用户输入密钥,可以对任意输入的明文进行加密: B. 根据用户输入的加密密钥,自动生成解密密钥,并能对加密密文进行解密: C. 实 ...

  6. MYSQL数据库密码的加密方式及破解方法

    转自http://hi.baidu.com/davice_li/blog/item/5f5b470be3307e32b0351db5.html MySQL数据库用户密码跟其它数据库用户密码一样,在应用 ...

  7. 详解MYSQL数据库密码的加密方式及破解方法(1)

    转自 http://hi.baidu.com/davice_li/blog/item/5f5b470be3307e32b0351db5.html MySQL数据库用户密码跟其它数据库用户密码一样,在应 ...

  8. php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)

    php加密解密的使用 一.项目说明 二.项目分析 1.js外部文件 2.HTML容器构建 3.layui前端验证 4.php后端验证 封装函数 密码验证规则 strpos内置函数 三.经典的核心加密函 ...

  9. pkcs1解密 springboot_使用springboot完成密码的加密解密

    现今对于大多数公司来说,信息安全工作尤为重要,就像京东,阿里巴巴这样的大公司来说,信息安全是最为重要的一个话题,举个简单的例子: 就像这样的密码公开化,很容易造成一定的信息的泄露.所以今天我们要讲的就 ...

  10. Web登录使用RSA对密码进行加密解密过程

    RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥.首先简单说一下RSA加密方式(借用知乎上面的理解,通俗易懂): ...

最新文章

  1. 盘点 15 个好用的 API 接口管理神器
  2. 机器学习要警惕的4个常见陷阱!
  3. eclipse导入myeclipse的web项目在eclipse中不能识别成web项目
  4. 【Python学习系列九】Python机器学习库scikit-learn实现SVM案例
  5. java方法体逻辑不会写怎么办,想自己写框架?不会写Java注解可不行
  6. pfSense如何创建和配置VLAN
  7. mybatis配置文件形式
  8. 合奏:机器学习中唯一(几乎)免费的午餐
  9. 如何延迟一个 Task 的执行 ?
  10. 楼天成夺Facebook黑客杯季军,已被Facebook录用得到美国绿卡
  11. 利用 AFN 上传相册或拍照图片
  12. (转贴) ArcIMS初级教程(1)
  13. visual studio开发工具的C#主流控件属性一览表
  14. 面试系列-Java面试总则
  15. 微信公众平台消息接口开发之校验签名与消息响应合并
  16. 软硬件兼容性问题学习笔记
  17. 用户信息填写web代码_zabbix监控系列之监控项(8、web监控)
  18. 2021-08-03 DISTINCT去重复操作
  19. 阿里云上如何过等保,收费标准怎么样?
  20. 大白话搞懂什么是同步/异步/阻塞/非阻塞

热门文章

  1. 如何用VB开发游戏外挂
  2. 保研经历总结-清华大学计算机系
  3. 【Verilog HDL】4.全减器
  4. C语言中sprintf函数的用法
  5. c语言:鸡兔同笼问题
  6. Android模拟器 使用 Fiddler抓包
  7. DPDK Release 21.05
  8. 单片机定时器实验报告C语言,51单片机定时器实验报告.doc
  9. 在大米云主机中采用CentOS 6.5 部署Redmine 3.3
  10. 微信公众号推送消息模板(抖音挺火的推送消息给女朋友)