Каков наилучший способ шифрования хранимых данных в web2py? - PullRequest
2 голосов
/ 04 ноября 2010

Мне нужно зашифровать данные, хранящиеся в web2py, точнее паролями.

Речь идет не об аутентификации, а о чем-то вроде линейки приложений, подобных KeePass.видно, что он включен в web2py, но и M2Secret может легко это сделать.С M2Secret я могу использовать это:

import m2secret

# Encrypt
secret = m2secret.Secret()
secret.encrypt('my data', 'my master password')
serialized = secret.serialize()

# Decrypt
secret = m2secret.Secret()
secret.deserialize(serialized)
data = secret.decrypt('my master password')

Но я должен был бы включить библиотеку M2Crypto в мое устройство.

1 Ответ

3 голосов
/ 04 ноября 2010

По умолчанию web2py хранит хэши паролей, используя HMAC + SHA512, поэтому вам нечего делать. Это лучше, чем предложенный вами механизм, потому что шифрование обратимо, а хеширование - нет. Вы можете изменить это и сделать то, что вы спрашиваете выше, но это не будет более безопасным, чем использование открытого текста (так как вам придется выставить ключ шифрования в приложении).

В любом случае. Допустим, у вас есть

db.define_table('mytable',Field('myfield'.'password'))

и вы хотите использовать m2secret. Вы бы сделали:

class MyValidator:
    def __init__(self,key): self.key=key
    def __call__(self,value):
        secret = m2secret.Secret()
        secret.encrypt(value, self.key)
        return secret.serialize()
    def formatter(self,value):
        secret = m2secret.Secret()
        secret.deserialize(value)
        return (secret.decrypt(self.key),None)

db.mytable.myfield.requires=MyValidator("master password")

В валидаторах web2py также есть двусторонние фильтры.

...