cubicweb/crypto.py
changeset 12626 32ee89340e59
parent 12619 48a010b35af2
parent 12616 bfab695b740a
child 12655 5b0ce10a7046
equal deleted inserted replaced
12624:24b9073a6617 12626:32ee89340e59
    23 
    23 
    24 from Crypto.Cipher import Blowfish
    24 from Crypto.Cipher import Blowfish
    25 
    25 
    26 
    26 
    27 _CYPHERERS = {}
    27 _CYPHERERS = {}
       
    28 
       
    29 
    28 def _cypherer(seed):
    30 def _cypherer(seed):
    29     if isinstance(seed, str):
    31     if isinstance(seed, str):
    30         seed = seed.encode('utf-8')
    32         seed = seed.encode('utf-8')
    31     try:
    33     try:
    32         return _CYPHERERS[seed]
    34         return _CYPHERERS[seed]
    35         return _CYPHERERS[seed]
    37         return _CYPHERERS[seed]
    36 
    38 
    37 
    39 
    38 def encrypt(data, seed):
    40 def encrypt(data, seed):
    39     string = pickle.dumps(data)
    41     string = pickle.dumps(data)
    40     string = string + '*' * (8 - len(string) % 8)
    42     string = string + b'*' * (8 - len(string) % 8)
    41     string = b64encode(_cypherer(seed).encrypt(string))
    43     string = b64encode(_cypherer(seed).encrypt(string))
    42     return str(string)
    44     return string.decode('utf-8')
    43 
    45 
    44 
    46 
    45 def decrypt(string, seed):
    47 def decrypt(string, seed):
       
    48     string = string.encode('utf-8')
    46     # pickle ignores trailing characters so we do not need to strip them off
    49     # pickle ignores trailing characters so we do not need to strip them off
    47     string = _cypherer(seed).decrypt(b64decode(string))
    50     string = _cypherer(seed).decrypt(b64decode(string))
    48     return pickle.loads(string)
    51     return pickle.loads(string)