[古典密码]:Hill cipher(希尔密码)

来源于我的博客

希尔加密法

根据字典序将字母转化为数字(0-25)
设定密钥矩阵(n*n),将明文转化为r*n的矩阵

将明文矩阵与密钥矩阵相乘即可得到密文矩阵(结果模26),再将其转化为字母即可.

以3*3密钥矩阵为例:(确保密钥矩阵能求逆)

int key[3][3] = {
	6,13,20,
	24,16,17,
	1,10,15
};

假设明文CAT,C=2,A=0,T=19,明文矩阵:(2,0,19)T

则密文矩阵:

[(6,13,20)T(24,16,17)T(1,10,15)T]×(2,0,19)T

=(31,216,325)T=(5,8,13)T(mod 26)

密文:5=F , 8=I, 13=N :FIN

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个实现希尔密码加解密的 Python 代码,可以让用户自行选择加密还是解密,自行输入明文或者密文以及密钥: ```python def shift_by_key(char, key_char): shift = ord(key_char) - 65 return chr((ord(char) + shift) % 26 + 65) def encrypt(message, key): encrypted = "" key_len = len(key) msg_len = len(message) for i in range(msg_len): char = message[i] key_char = key[i % key_len] encrypted += shift_by_key(char, key_char) return encrypted def decrypt(encrypted, key): decrypted = "" key_len = len(key) msg_len = len(encrypted) for i in range(msg_len): char = encrypted[i] key_char = key[i % key_len] shift = ord(key_char) - 65 decrypted += chr((ord(char) - shift - 65) % 26 + 65) return decrypted # 获取用户输入 action = input("请输入操作(加密/解密):") message = input("请输入明文或密文:").upper() key = input("请输入密钥:").upper() # 执行操作并输出结果 if action == "加密": encrypted = encrypt(message, key) print("加密结果为:", encrypted) elif action == "解密": decrypted = decrypt(message, key) print("解密结果为:", decrypted) else: print("无效的操作!请重新运行程序。") ``` 这个代码实现了用户可以自行选择加密还是解密的功能,同时让用户输入明文或者密文以及密钥。在加密过程中,我们使用 `shift_by_key()` 函数来计算每个字符的偏移量,然后将其加密。在解密过程中,我们使用类似的方法来计算每个字符的偏移量,然后将其解密。需要注意的是,在解密过程中,我们需要将偏移量从加密时的值转换为减去该值的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值