Каков наилучший способ шифрования хранимых данных в 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 также есть двусторонние фильтры.