2017-04-06 1 views
1

Je veux stocker le cryptogramme crypté par cpabe_BSW07 hybrides dans les fichiers, mais je trouve des erreurs lors de décapage du cryptogramme:Comment linéariser/stocker le cryptogramme crypté par CPabe_BSW07 hybrides de charme

 
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() 

Répondre

0

hahaha, Je sais comment résoudre maintenant:

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

En plus de poster votre code, il est nécessaire de décrire comment vous l'avez résolu et quel était le problème. S'il vous plaît [modifier] votre réponse pour le rendre meilleur et vous pourriez obtenir un upvote. –