情人节快到了。怎么给暗恋的TA加密表白一下呢?
线性代数中有一部分讲述了用矩阵运算对信息进行加密,今天实践一下。
加密原理:给字符编码一下,这样就可以把字符串转换为向量a=(a1,a2...an)。
再搞一个密码本。随机生成一个整数矩阵B。这样加密就是一个矩阵乘法:a@B=a_encode。破译就是这个过程的逆。a = a_encode@inverse(B)。
双方保留好密码本,然后就可以愉快的加密通信了。
注意事项:
密码本需要是可逆的(invertible)非奇异(nonsingular)。不然的话矩阵不能求逆。
密码本搞大一点,边长需要大于字符串长度。设置成100×100的方阵就可以加密100个字符的信息。
不说了,这就找女神表白去
import numpy as np
orignalmsg = 'i love you' # 要传输的信息
alphabeta = 'abcdefghijklmnopqrstuvwxyz ' # 给字符串编个码
mulu = {}
i=0
for x in alphabeta:
mulu[x]=i
i=i+1
#生成一个密码本矩阵
book = np.random.randint(0,200,size=(len(orignalmsg),len(orignalmsg)))
#编码 矩阵乘法
enconde = [mulu[y] for y in orignalmsg]
encoded= np.array(enconde)@book
#译码 矩阵求逆
decode = encoded@np.linalg.inv(book)
decode=np.round(np.array(decode))
#还原信息
recmsg =[alphabeta[x] for x in np.int32(decode)]