2010-10-21 57 views
12

我想實現一個加密的char字段。自定義字段的to_python無法正常工作? - Django


我使用pydes加密

這是我有:

from pyDes import triple_des, PAD_PKCS5 
from binascii import unhexlify as unhex 
from binascii import hexlify as dohex 

class BaseEncryptedField(models.CharField): 

    def __init__(self, *args, **kwargs): 
     self.td = triple_des(unhex('c35414909168354f77fe89816c6b625bde4fc9ee51529f2f')) 
     super(BaseEncryptedField, self).__init__(*args, **kwargs) 

    def to_python(self, value): 
     return self.td.decrypt(unhex(value), padmode=PAD_PKCS5) 

    def get_db_prep_value(self, value): 
     return dohex(self.td.encrypt(value, padmode=PAD_PKCS5)) 

領域在數據庫中成功地

但保存的加密retireved時它不打印出解密版本


任何想法?

回答

16

你忘了設置元類:

class BaseEncryptedField(models.CharField): 

    __metaclass__ = models.SubfieldBase 

    ... etc ... 

由於the documentation explainsto_python僅使用SubfieldBase元類時調用。

+2

哇!非常感謝!我很高興:) – RadiantHex 2010-10-21 14:15:55

+1

我認爲這個答案現在已經過時了最新版本的Django。 – 2017-04-27 10:47:03

相關問題