用Python实现Rijndael MixColums的麻烦

Shantanu Shinde

我正在尝试在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']]

第一行是正确的。但是为什么其他行出错呢?我在做什么错?

托帕可

对于存在尚未在代码中被认为是一种情况区分:XOR0x1b只为进行a >= 127在这里这将改变情况b == 2b == 3

def multiply(b,a):
    if b == 1:
        return a
    tmp = (a<<1) & 0xff
    if b == 2:
        return tmp if a < 127 else tmp^0x1b
    if b == 3:
        return tmp^a if a < 127 else (tmp^0x1b)^a

通过此更改,可以获得预期的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章