'type'对象不是可订阅的python

xqkwcwgp  于 2022-11-26  发布在  Python
关注(0)|答案(1)|浏览(115)

下面是我定义的函数,当我试图调用它们时,我得到了错误消息,注意到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)

mbjcgjjk

mbjcgjjk1#

问题似乎来自于mixColumns函数,您将v1v2v3v4转换为十六进制,然后提取第三个和第四个字符。但是,当值小于15时,您无法获取第四个字符,因为十六进制值仅为3个字符(0 =〉0x0,15 =〉0xF,16 =〉0x10)。
如果要获取前面没有“0x”的十六进制值,则可以简单地使用v1 = v1[2:],这意味着从第三个字符开始获取所有内容。
如果目标是取前两个十六进制字符而忽略其余的,那么你需要检查是否有足够的字符:

char0 = v1[2]
char1 = v1[3] if len(v1) >= 4 else "0"

修正后,你会得到一个mixColumns函数,如下所示

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)
  v1=v1[2:]
  mixMatrix[0][column]=v1

  v2=hex(v2)
  v2=v2[2:]
  mixMatrix[1][column]=v2

  v3=hex(v3)[2:] #Same thing but shorter
  mixMatrix[2][column]=v3

  v4=hex(v4)[2:]
  mixMatrix[3][column]=v4
  return mixMatrix

相关问题