未知
persistent_crypto_dict的Python项目详细描述
这个类使用sqlite3和 以某种方式加密字典的密钥和值 很难强制执行 分贝。
- 示例用法:
>>> from pcd import PersistentCryptoDict >>> d=PersistentCryptoDict() >>> print d <pcd.PersistentCryptoDict instance at 0x8dcb54c> >>> print d['my key'] None >>> d['my key']='secret value' >>> print d['my key'] secret value >>> d['my key']='top secret value' >>> print d['my key'] top secret value
加密
dict中的键和值根据 以下算法(学分:dnet):
设定值
- 我们计算它们的keyhash-a hmac-sha512(salt,key)
- 我们将密钥分成两半,前半部分作为十六进制摘要(ascii)。 第二个是二进制的
- 我们使用keyhash第2步中的第二个二进制部分来加密 值
- 我们使用步骤2中的ascii keyhash作为数据库的密钥,并且 该值是步骤3的加密结果。
获取值
- 我们计算它们的keyhash-a hmac-sha512(salt,key)
- 我们将密钥分成两半,前半部分作为十六进制摘要(ascii)。 第二个是二进制的
- 我们使用步骤2中的ascii keyhash作为键来查询数据库
- 我们使用keyhash第2步中的第二个二进制部分来解密 值
数据库仅包含以下数据对:
(hmac-sha512(key, salt).hexdigest()[:64], # key aes256-ofb(hmac-sha512(key, salt).digest()[32:], value)) # value
我们恪守施耐尔定律: https://www.schneier.com/blog/archives/2011/04/schneiers_law.html,和 因此,我们将考虑检索任何有意义的数据的任务 没有这样一个数据库中巨大的彩虹表是徒劳的。:)