我需要加密存储在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库。
对于已经包含在web2py中的PyMe,有没有办法做到这一点?
答案 0 :(得分:3)
默认情况下,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中,验证器也是双向过滤器。