在web2py中加密存储数据的最佳方法是什么?

时间:2010-11-04 09:35:47

标签: security encryption web2py m2crypto pyme

我需要加密存储在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,有没有办法做到这一点?

1 个答案:

答案 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中,验证器也是双向过滤器。