效果
![](https://i-blog.csdnimg.cn/blog_migrate/641db3ae0d4d5eb3e06076f3e219f684.png)
代码
import numpy as np
dic_alpah2index = {}
def intial_alpha_index():
index_dic = list(range(26))
np.random.shuffle(index_dic)
dic0 = {}
dic1 = {}
for i in range(26):
dic0[chr(97+i)] = index_dic[i]
dic1[index_dic[i]] = chr(97+i)
return [dic0, dic1]
def intial_key_matrix(seed=1234,key_matrix_size=(3,3)):
key_matrix = np.array([[6,24,1],[13,16,10],[20,17,15]])
key_matrix_inv = np.array([[8,5,10],[21,8,21],[21,12,8]])
return [key_matrix, key_matrix_inv]
def encrypt(m, key_matrix, alpha_index, padding):
arr_m = trans_str2arr(m, key_matrix.shape[0], alpha_index[0], padding)
arr_c = (key_matrix @ arr_m) % 26
return trans_arr2str(arr_c, alpha_index[1])
def decrypt(c, key_matrix, alpha_index, padding):
return encrypt(c, key_matrix, alpha_index, padding)
def trans_str2arr(s, height, alpha2index, padding):
lt_s = list(''.join(filter(str.isalpha, s.lower())))
lt_s.extend([padding]*(0 if len(lt_s)%height==0 else height-len(lt_s)%height))
func = lambda x:alpha2index[x]
index_lt = list(map(func,lt_s))
return np.array(index_lt).reshape(height, int(len(index_lt)/height))
def trans_arr2str(arr, index2alpha):
arr.astype(np.int32)
arr = arr.reshape(1, arr.shape[0]*arr.shape[1])
func = lambda x:index2alpha[x]
return ''.join(list(map(func,arr[0])))
if __name__ == '__main__':
padding = 'x'
dic0 = intial_alpha_index()
key_matrix = intial_key_matrix()
m = 'you\'re just like an angel'
c = encrypt(m, key_matrix[0], dic0, padding)
m_ = decrypt(c, key_matrix[1], dic0, padding)
print(f'原始明文:{m}')
print(f'加密密文:{c}')
print(f'解密明文:{m_}')