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