对于希尔加解密很多writeup都说用在线工具,所以研究了一下,写了一个方便的加解密python代码,根据给定的字母表及私钥字符串,尝试不同纬度不同重叠的加密矩阵输出加解密结果。运行效果如下:
代码文件Hill希尔加解密_final.py
import numpy as np
import string
# 导入自定义模块以创建矩阵和转换字符串
from util_create_matrix import create_matrix_from_list, create_numbers_from_string
# 定义了使用的字符集,包括所有小写字母、空格、逗号和句点
alphabet = "abcdefghijklmnopqrstuvwxyz ,."
# 密钥短语,用于生成加密/解密所需的密钥矩阵
key_phrase = "www.verymuch.net"
def mod_inverse(a, m):
"""
计算模m下a的逆元。逆元是满足 (a * x) % m == 1 的整数x。
"""
a = a % m
for x in range(1, m):
if (a * x) % m == 1:
return x
return None
def matrix_mod_inv(matrix, modulus):
"""
计算给定矩阵在模modulus下的逆矩阵。这是通过先计算矩阵的行列式及其模逆,
然后应用数学公式来实现的。
"""
det = int(np.round(np.linalg.det(matrix))) # 计算行列式并取整
det_inv = mod_inverse(det, modulus) # 计算行列式的模逆
matrix_modulus_inv = (
det_inv * np.round(det * np.linalg.inv(matrix)).astype(int) % modulus
)
return matrix_modulus_inv
def char_to_num(char):
"""
将字符转换为对应的数字。这里将空格、逗号和句号也视为字符集的一部分。
"""
if char == ' ':
return 26
elif char == ',':
return 27
el