【发布时间】:2020-07-10 10:59:01
【问题描述】:
我正在尝试在 python 中为 AES 实现 MixColumns 算法,但我遇到了一些麻烦。这是我的代码:
def multiply(b,a):
if b == 1:
return a
if b == 2:
return ((a<<1)&0xff)^0x1b
if b == 3:
return (((a<<1)&0xff)^0x1b)^a
s_mat1 = [np.copy(s) for s in s_mat]
for i in range(len(s_mat)):
for j in range(len(s_mat[i])):
s_mat[i][j] = multiply(mx_col[i][0],s_mat1[0][j])^multiply(mx_col[i][1],s_mat1[1][j])^multiply(mx_col[i][2],s_mat1[2][j])^multiply(mx_col[i][3],s_mat1[3][j])
这里s_mat 是状态矩阵,mx_col 是混合列矩阵。我为此示例尝试了此代码:
但是,我的代码给出了与给定不同的答案。这是我的代码给出的答案:
[['ba', '84', 'e8', '1b'], ['6e', 'a4', '8d', '5b'], ['f4', '96', '6', '7d'], ['61', '29', 'e', '46']]
第一行是正确的。但是为什么其他行会出错?我做错了什么?
【问题讨论】:
标签: python encryption cryptography aes rijndael