【问题标题】:What is the best way to encrypt stored data in web2py?在 web2py 中加密存储数据的最佳方法是什么?
【发布时间】:2010-11-04 09:35:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: security encryption web2py m2crypto pyme


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

    【讨论】:

    • 请注意,我需要使用可逆加密存储数据,因为应用程序的目标是分发存储的密码。我关心的是对数据库的离线攻击,这就是我要加密数据的原因。但我会看看 PyMe 中可用的公钥算法,以避免在 web2py 中添加依赖项。
    • 您可能需要考虑将数据库存储在加密的文件系统中(可能在文件中)。如果将加密责任交给操作系统而不是交给应用程序更好,因为后者如果在受到攻击时可能会受到损害。
    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2019-02-24
    • 2013-11-24
    相关资源
    最近更新 更多