【问题标题】:'type' object is not subscriptable python\'type\' 对象不是可订阅的 python
【发布时间】:2022-11-25 03:03:22
【问题描述】:

这是我定义的函数,当我尝试调用它们时出现错误 请注意,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)
    

【问题讨论】:

  • 请正确格式化问题并提供足够的信息以供他人搜索答案。如果我们甚至不知道mixColumnsgetValues 做什么,我们期望如何解决问题。
  • 抱歉,这是我第一次使用堆栈溢出,不胜感激
  • 显示完整的错误信息
  • @hpaulj 我发了,谢谢
  • 您传递给getValues 的这个resultMatrix 是什么?

标签: python python-3.x numpy


【解决方案1】:

问题似乎来自 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

【讨论】:

  • 感谢您提供有用的解释,但不幸的是,在应用您的解决方案后,它抛出了同样的错误
猜你喜欢
  • 1970-01-01
  • 2023-02-03
  • 2012-01-10
  • 2018-04-29
  • 2022-12-11
  • 2023-02-10
  • 1970-01-01
  • 2011-05-06
  • 2020-09-07
相关资源
最近更新 更多