下面是我定义的函数,当我试图调用它们时,我得到了错误消息,注意到resultmatrix是一个4x4 2d numpy数组
**功能为:
import numpy as np
def getValues(row,column,resultMatrix):
a=resultMatrix[row][column]
prefix='0x'
a=prefix+a
an_integer = int(a, 16)
return an_integer
mixMatrix=np.array([['00','00','00','00'],
['00','00','00','00'],
['00','00','00','00'],
['00','00','00','00']])
def mixColumns(a, b, c, d,column):
v1=(gmul(a, 2) ^ gmul(b, 3) ^ gmul(c, 1) ^ gmul(d, 1))
v2=(gmul(a, 1) ^ gmul(b, 2) ^ gmul(c, 3) ^ gmul(d, 1))
v3=(gmul(a, 1) ^ gmul(b, 1) ^ gmul(c, 2) ^ gmul(d, 3))
v4=(gmul(a, 3) ^ gmul(b, 1) ^ gmul(c, 1) ^ gmul(d, 2))
v1=hex(v1); char0=v1[2];char1=v1[3];v1=str(char0+char1)
mixMatrix[0][column]=v1
v2=hex(v2); char0=v2[2];char1=v2[3];v2=str(char0+char1)
mixMatrix[1][column]=v2
v3=hex(v3); char0=v3[2];char1=v3[3];v3=str(char0+char1)
mixMatrix[2][column]=v3
v4=hex(v4); char0=v4[2];char1=v4[3];v4=str(char0+char1)
mixMatrix[3][column]=v4
return mixMatrix
def gmul(a, b):
if b == 1:
return a
tmp = (a << 1) & 0xff
if b == 2:
return tmp if a < 128 else tmp ^ 0x1b
if b == 3:
return gmul(a, 2) ^ a
- 当我按如下所示调用时,收到错误消息
a=getValues(0,0,resultMatrix);b=getValues(1,0,resultMatrix);c=getValues(2,0,resultMatrix);d=getValues(3,0,resultMatrix);mixColumns(a, b, c, d,0)
1条答案
按热度按时间mbjcgjjk1#
问题似乎来自于
mixColumns
函数,您将v1
、v2
、v3
和v4
转换为十六进制,然后提取第三个和第四个字符。但是,当值小于15时,您无法获取第四个字符,因为十六进制值仅为3个字符(0 =〉0x0,15 =〉0xF,16 =〉0x10)。如果要获取前面没有“0x”的十六进制值,则可以简单地使用
v1 = v1[2:]
,这意味着从第三个字符开始获取所有内容。如果目标是取前两个十六进制字符而忽略其余的,那么你需要检查是否有足够的字符:
修正后,你会得到一个
mixColumns
函数,如下所示