希尔加密的原理就不多讲了,直接上代码。
定义一个函数:def fun(s, mod1, mod2, key)
s:要加密/解密的字符串
mod1:加密或解密
mod2:A=0或A=1,目前网络上的希尔加密都不是统一的,两种模式得出的结果是不一样的。
key:密钥,转换为矩阵后必须为方阵且可逆
要有传入的参数,key的长度为平方数,否则return
#边界条件
if not s:
return "请输入密文"
if not key:
return "请输入密钥"
l = int(len(key) ** 0.5)
if l ** 2 != len(key):
return "请输入有效密钥"
#统一转成小写字母,便于将字符串转成矩阵
s = s.lower()
key = key.lower()
#确定矩阵的长和宽
if len(s) % l == 0:
s_w = len(s) // l
else:
s_w = len(s) // l + 1
s_h = l
#初始化矩阵列表
ss = [[0 for _ in range(s_w)] for _ in range(s_h)]
keys = [[0 for _ in range(l)] for _ in range(l)]
对于上述的处理:不论加密还是解密,都是密钥x密文,或密钥的逆x密文,所以密文的高为密钥的边长,宽为:刚