Каков наилучший способ шифрования хранимых данных в web2py?

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

Речь идет не об аутентификации, а о чем-то вроде линейки приложений, подобных KeePass.

Я видел, что это включено в web2py, но M2Secret может легко это сделать. С M2Secret я могу использовать это:

импорт м2секрет

# Encrypt
secret = m2secret.Secret()
secret.encrypt("мои данные", "мой мастер-пароль")
serialized = secret.serialize ()

# Расшифровать
secret = m2secret.Secret()
secret.deserialize(сериализованная)
data = secret.decrypt("мой мастер-пароль")

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

Есть ли способ сделать это с PyMe, который уже включен в web2py?

1 ответ

Решение

По умолчанию 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 также есть двусторонние фильтры.

Другие вопросы по тегам