2

我需要加密存储在 web2py 中的数据,更准确地说是密码。

这不是关于身份验证,而是更多类似于 KeePass 的应用程序。

我已经看到它包含在 web2py 中,但是M2Secret可以很容易地做到这一点。使用 M2Secret 我可以使用它:

导入 m2secret

# 加密
秘密 = m2secret.Secret()
secret.encrypt('我的数据', '我的主密码')
序列化 = secret.serialize()

# 解密
秘密 = m2secret.Secret()
secret.deserialize(序列化)
data = secret.decrypt('我的主密码')

但是我必须在我的设备中包含 M2Crypto 库。

有没有办法使用 web2py 中已经包含的 PyMe 来做到这一点?

4

1 回答 1

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

于 2010-11-04T12:56:40.837 回答