未知

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):

设定值

  1. 我们计算它们的keyhash-a hmac-sha512(salt,key)
  2. 我们将密钥分成两半,前半部分作为十六进制摘要(ascii)。 第二个是二进制的
  3. 我们使用keyhash第2步中的第二个二进制部分来加密 值
  4. 我们使用步骤2中的ascii keyhash作为数据库的密钥,并且 该值是步骤3的加密结果。

获取值

  1. 我们计算它们的keyhash-a hmac-sha512(salt,key)
  2. 我们将密钥分成两半,前半部分作为十六进制摘要(ascii)。 第二个是二进制的
  3. 我们使用步骤2中的ascii keyhash作为键来查询数据库
  4. 我们使用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,和 因此,我们将考虑检索任何有意义的数据的任务 没有这样一个数据库中巨大的彩虹表是徒劳的。:)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
分别使用椭圆曲线密码对文本消息进行java加密和解密   java如何将JTable滚动到特定值?   java JSP登录注销简单web应用程序,使用bean在数据库中存在数据时返回false   java无法编译,未设置类路径,包不存在?   java为什么这一变量会受到影响?   集合为什么Java在Map中没有putIfAbsent(key,supplier)方法?   安卓在Java中计算仿真时间   java初始化方法在主类中的指定方法之前运行   java如何在hadoop的reduce中将genericWritable恢复为用户定义的可写?   如何使用java替换pdf中的文本   参数不适用于ASP服务器的java HttpPost   创建对象时的java NullPointerException   Java JPanel中的swing图形有问题,但它在一个框架中工作   java Android Studio在硬件设备上运行时出错   google api类路径的java空指针异常   java如何将InputStream转换为DataHandler?   java在多个Jetty服务器之间共享连接池