乘数加密是简单代替密码的一种。乘数加密法脱胎于凯撒加密法,加密和解密符号设计把他们转换成数字,加上或者减去密钥,然后把新的数字转换回符号,当我们把加减密钥变成乘以密钥,就是乘法加密法。有关凯撒加密法可以看之前的文章《Python实现凯撒加解密》。
加密过程
乘数加密法和凯撒加密法一样,需要提前知道加密的明文个数,且需要设置一个加密转换后的字母或者符号,一般是使用A-Z
26个字母。我们先来了解下,整个加密过程需要哪些数据:
- 替代字母或符号:一般只使用包含大写字母的符号集
A-Z
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- 加密密钥:加密密钥为一个大小大于
0
且小于明文长度的数字,假如设置明文长度为n
,密钥为k
:
0<k<n
- 加密算法:假设当前明文为
P
,密钥为k
,则获取密文算法C(密文)= E(p) = (P * k) mod 26
代码实现
import pyperclip
message = "this is secret message
key = 13 # 加解密key
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
translated = ""
message = message.upper()
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = (num * key)% 26 + 'A'
else:
translated = translated + symbol
print(translated) #输出加密结果