2017-04-06 108 views
1

混合CPabe_BSW07我想存储在文件中混合cpabe_BSW07加密的密文加密的密文,但我发现酸洗密文时的错误:如何序列化/存储在魅力

 
raise TypeError, "can't pickle %s objects" % base.__name__ 
TypeError: can't pickle Element objects 
from charm.toolbox.pairinggroup import PairingGroup 
from charm.schemes.abenc.abenc_bsw07 import CPabe_BSW07 
from charm.adapters.abenc_adapt_hybrid import HybridABEnc 
import pickle 


if __name__ == "__main__": 
    groupObj = PairingGroup('SS512') 
    cpabe = CPabe_BSW07(groupObj) 
    hyb_abe = HybridABEnc(cpabe, groupObj) 
    (pk, mk) = hyb_abe.setup() 
    access_policy = '((four or three) and (two or one))' 
    sk = hyb_abe.keygen(pk, mk, ['ONE', 'TWO', 'THREE']) 

    sourcefile = open("source.dat", 'rb') 
    plaintext = sourcefile.read() 
    sourcefile.close() 

    encryptedfile = open("encrypted.dat", 'wb') 
    ciphertext = hyb_abe.encrypt(pk, plaintext, access_policy) 
    pickle.dump(ciphertext, encryptedfile) 
    encryptedfile.close() 

回答

0

哈哈哈,我知道现在如何解决:

from charm.toolbox.pairinggroup import PairingGroup 
from charm.schemes.abenc.abenc_bsw07 import CPabe_BSW07 
from charm.adapters.abenc_adapt_hybrid import HybridABEnc 
import pickle 

if __name__ == "__main__": 
    groupObj = PairingGroup('SS512') 
    cpabe = CPabe_BSW07(groupObj) 
    hyb_abe = HybridABEnc(cpabe, groupObj) 
    (pk, mk) = hyb_abe.setup() 
    access_policy = '((four or three) and (two or one))' 
    sk = hyb_abe.keygen(pk, mk, ['ONE', 'TWO', 'THREE']) 

    sourcefile = open("source.dat", 'rb') 
    plaintext = sourcefile.read() 
    sourcefile.close() 

    encryptedfile = open("encrypted.dat", 'wb') 
    ciphertext = hyb_abe.encrypt(pk, plaintext, access_policy) 
    ciphertext["c1"]["C"] = groupObj.serialize(ciphertext["c1"]["C"]) 
    for key in ciphertext["c1"]["Cy"] : 
     ciphertext["c1"]["Cy"][key] = groupObj.serialize(ciphertext["c1"]["Cy"][key]) 
    ciphertext["c1"]["C_tilde"] = groupObj.serialize(ciphertext["c1"]["C_tilde"]) 
    for key in ciphertext["c1"]["Cyp"] : 
    ciphertext["c1"]["Cyp"][key] = groupObj.serialize(ciphertext["c1"]["Cyp"][key]) 
    pickle.dump(ciphertext, encryptedfile) 
    encryptedfile.close() 

    encryptedfile = open("encrypted.dat", 'rb') 
    ciphertext2 = pickle.load(encryptedfile) 
    ciphertext2["c1"]["C"] = groupObj.deserialize(ciphertext2["c1"]["C"]) 
    for key in ciphertext2["c1"]["Cy"]: 
    ciphertext2["c1"]["Cy"][key] = groupObj.deserialize(ciphertext2["c1"]["Cy"][key]) 
    ciphertext2["c1"]["C_tilde"] = groupObj.deserialize(ciphertext2["c1"]["C_tilde"]) 
    for key in ciphertext2["c1"]["Cyp"]: 
    ciphertext2["c1"]["Cyp"][key] = groupObj.deserialize(ciphertext2["c1"]["Cyp"][key]) 
    print hyb_abe.decrypt(pk, sk, ciphertext2) == plaintext 
    encryptedfile.close() 
+0

除了发布你的代码,有必要描述你是如何解决它,以及问题是什么。请[编辑]你的答案,使其更好,你可能会得到upvote。 –