实例 & 类:给定 x-1 时需要 x 个参数
Instances & classes: requiring x arguments when x-1 given
为了能够测试不同的加密方案,我写了下面的类。但是,我无法从不同的加密方案实例化对象。有人可以指出我没有抓住 atm 没有意义的事情吗?我不确定为什么它不起作用。它给出了 TypeError: encrypt() takes exactly 3 arguments (2 given)
但它确实已经自我通过,所以我不知道如何在其余部分的基础上修复它。
class AXU:
def __init__(self, sec_param):
self.sec_param = sec_param
def getHash(self):
# sample a, b and return hash function
a = random.randrange(self.sec_param)
b = random.randrange(self.sec_param)
return lambda x : a*x+b % sec_param
class BC(object):
def __init__(self, sec_param):
# generate a key
self.sec_param = sec_param
def encrypt(self, message, key):
#encrypt with AES?
cipher = AES.new(key, MODE_CFB, sec_param)
msg = iv + cipher.encrypt(message)
return msg
class tBC(object):
def __init__(self, sec_param):
self.sec_param = sec_param
def encrypt(self, tweak, message):
#pass
return AES.new(message, tweak)
class Trivial(tBC):
def __init__(self):
self.bcs = {}
def encrypt(self, tweak, message):
if tweak not in self.bcs.keys():
bc = BC()
self.bcs[tweak] = bc
return self.bcs[tweak].encrypt(message)
class Our(tBC):
def __init__(self, sec_param):
self.bc1 = BC(sec_param)
self.bc2 = BC(sec_param)
self.bc3 = BC(sec_param)
self.bc4 = BC(sec_param)
# encryption over GF field
def encrypt(self, tweak, message):
return self.bc1.encrypt(self.bc2.encrypt(tweak) * self.bc3.encrypt(message) + self.bc4.encrypt(tweak))
您正在将 一个 参数传递给绑定方法:
return self.bc1.encrypt(
self.bc2.encrypt(tweak) * self.bc3.encrypt(message) +
self.bc4.encrypt(tweak))
这是 BC.encrypt()
方法的每个参数,此方法在 self
、message
和 key
之外需要 2 个参数。
要么为 key
传入一个值,要么从 BC.encrypt()
方法定义中删除该参数(并从其他地方获取密钥;可能来自 [=17] 中设置的实例属性=]).
为了能够测试不同的加密方案,我写了下面的类。但是,我无法从不同的加密方案实例化对象。有人可以指出我没有抓住 atm 没有意义的事情吗?我不确定为什么它不起作用。它给出了 TypeError: encrypt() takes exactly 3 arguments (2 given)
但它确实已经自我通过,所以我不知道如何在其余部分的基础上修复它。
class AXU:
def __init__(self, sec_param):
self.sec_param = sec_param
def getHash(self):
# sample a, b and return hash function
a = random.randrange(self.sec_param)
b = random.randrange(self.sec_param)
return lambda x : a*x+b % sec_param
class BC(object):
def __init__(self, sec_param):
# generate a key
self.sec_param = sec_param
def encrypt(self, message, key):
#encrypt with AES?
cipher = AES.new(key, MODE_CFB, sec_param)
msg = iv + cipher.encrypt(message)
return msg
class tBC(object):
def __init__(self, sec_param):
self.sec_param = sec_param
def encrypt(self, tweak, message):
#pass
return AES.new(message, tweak)
class Trivial(tBC):
def __init__(self):
self.bcs = {}
def encrypt(self, tweak, message):
if tweak not in self.bcs.keys():
bc = BC()
self.bcs[tweak] = bc
return self.bcs[tweak].encrypt(message)
class Our(tBC):
def __init__(self, sec_param):
self.bc1 = BC(sec_param)
self.bc2 = BC(sec_param)
self.bc3 = BC(sec_param)
self.bc4 = BC(sec_param)
# encryption over GF field
def encrypt(self, tweak, message):
return self.bc1.encrypt(self.bc2.encrypt(tweak) * self.bc3.encrypt(message) + self.bc4.encrypt(tweak))
您正在将 一个 参数传递给绑定方法:
return self.bc1.encrypt(
self.bc2.encrypt(tweak) * self.bc3.encrypt(message) +
self.bc4.encrypt(tweak))
这是 BC.encrypt()
方法的每个参数,此方法在 self
、message
和 key
之外需要 2 个参数。
要么为 key
传入一个值,要么从 BC.encrypt()
方法定义中删除该参数(并从其他地方获取密钥;可能来自 [=17] 中设置的实例属性=]).