2016-07-31 54 views
0

我已經編寫了以下類來測試不同的加密方案。但是,我在通過不同的加密方案實例化對象時遇到了問題。有人能指出一些沒有意義的東西,我不趕上atm嗎?我不確定它爲什麼不起作用。它給出了一個TypeError: encrypt() takes exactly 3 arguments (2 given),但它確實有自我傳遞,所以我不知道如何解決它在其他人的基礎上。實例和類:當x-1給出時需要x個參數

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)) 
+0

你究竟在哪裏傳遞了兩個參數(除了'self')呢?所有'encrypt'調用都有一個參數。 –

+0

請確保包含* full * traceback。我可以猜出錯誤發生的位置,但是完整的追溯會告訴我們一定的錯誤,並確保我沒有錯過其他情況。 –

回答

1

您傳遞一個參數綁定方法:

return self.bc1.encrypt(
    self.bc2.encrypt(tweak) * self.bc3.encrypt(message) + 
    self.bc4.encrypt(tweak)) 

這是一個參數傳遞給每個BC.encrypt()方法,而這種方法需要2超出selfmessagekey

要麼傳遞值爲key,要麼從BC.encrypt()方法定義中刪除該參數(並從其他位置獲取密鑰;或許從__init__中設置的實例屬性)。

相關問題