密码保护的数据变得简单。

priv的Python项目详细描述


目录

使用方法

例如,假设您正在使用gnupg。你要在一封信上签名,但必须先签名 需要您的密码。您的密码是否成为实例化 私钥?不,它首先由一个安全的密钥派生函数散列。那 散列然后成为对称密码(如aes)的输入,然后解密 您存储的私钥。这就是Privy所做的。

不要害怕!有了私密,这变得非常简单:

>>>importprivy>>>>>># After creating secret, immediately encrypt it using Privy.>>>data=b'secret'>>>>>>hidden=privy.hide(data,ask_for_password())>>>hidden'1$2$fL7xRh8WKe...'

现在您可以安全地存储或传输隐藏的秘密。用户需要时 要再次使用他们的秘密,请询问他们的密码以便查看。

>>>privy.peek(hidden,password)b'secret'

安装操作

Privy在Linux/MacOS和Windows上可用,并支持Python2.7、3.3+、PyPy和PyPy3.3-5.5+。

$ pip install privy

加密方案

秘密使用fernet协议加密。具体来说,它使用aes 加密并具有使用hmac的内置身份验证。用于 加密是从密码中派生出来的,使用a 密钥派生函数 。这个 使用的密钥派生函数是 argon2 ,密码散列的获胜者。 竞争。支持argon2i和argon2d两种变体。

加密格式

ascii(argon2算法安全级别base64(salt)base64(fernet令牌))

API

有两个功能: 隐藏 查看

隐藏

隐藏(secret,password,security=2,salt=none,server=true)

使用密码加密。将隐藏的秘密返回为Unicode。

  • 参数
    • 机密 字节 )-要加密的机密。
    • 密码 字节 Unicode )-用于访问机密的密码。
    • 安全性 int )-包含0-20的数字。更高的值在 计算速度慢和内存使用量大的代价。请参见安全级别。
    • salt 字节 )—用于密码哈希的salt。默认为os.urandom(32)
    • 服务器 bool )-如果 true ,则假定侧信道攻击保护为 需要,因此将使用argon2i算法。否则,密码将 使用argon2d算法进行哈希运算。

偷看

查看(隐藏,密码,过期=无)

使用 密码解密 隐藏的 。将机密返回为 字节

  • 参数
    • 隐藏 字节 Unicode )-要解密的隐藏秘密。
    • 密码 字节 Unicode )-用于访问机密的密码。
    • 过期 int )-加密后的最大秒数 是允许的。默认值为无到期。

如果密码错误,则会引发一个值错误 不同的隐藏机密,或加密后的秒数>; 过期 参数。

安全级别

所有预期的时间都是从英特尔酷睿i7-2670qm@2.2ghz的测试中提取出来的。 256基布的秘密。

这是命令,其中 sl 是所需的安全级别:

$ python -m timeit -s "import privy, os; pw = 'password'; s = os.urandom(1024 * 256); h = privy.hide(s, pw, SL)""privy.peek(h, pw)"
<表> < COLGROUP > < COL/> < COL/> < COL/> < COL/> <广告> 水平 argon2设置 预期时间 注释 < /广告> <正文> 0 m=8 kib,t=1 7毫秒 尽可能低 1 m=4 mib,t=10 54毫秒 > 2 m=8 mib,t=10 99毫秒 默认值 3 m=32 mib,t=10 367毫秒 > 4 m=48 mib,t=10 540毫秒 > 5 m=96 mib,t=10 1.1秒 不错的选择 6 m=256 mib,t=10 3秒 > 7 m=512 mib,t=10 6秒 > 8 m=768兆字节,t=10 9秒 > 9 m=1吉布,t=10 12.2秒 > 10 M=2吉布,T=20 48秒 用于 用户机器 11 m=3吉布,t=30 12 M=4吉布,T=40 ? 13 M=5吉布,T=50 ? 14 M=6吉布,T=60 < >? 15 M=7吉布,T=70 ? 16 M=8吉布,T=80 ? 17 M=9吉布,T=90 ? 18 m=10吉布,t=100 ? 19 m=11吉布,t=110 ? 20 M=12吉布,T=120 ? < > <表>

许可证

私人财产按下列任一条款分配

由您选择。

更改日志

强调重要的变化。

6.0.0

  • 中断: 已放弃对python 3.3的支持。

5.0.0

  • 中断: 根据麻省理工学院和apache v2.0的条款,privy现在是双重授权的。
  • 现在只有文档化的方法 hide peek 才在根命名空间中公开。
  • travis现在使用pypy和pypy3的最新版本运行测试。
  • 文档的改进。

4.0.0

  • 中断: 为了更合理的一致性,安全级别7现在使用512 MIB的RAM,而不是448。
  • 文档的主要改进。

3.0.0

  • 增加了安全级别11-20。这些都是资源密集型的,因此 仅供个人使用。

2.0.1

  • 中断: 由于请求,加密格式现在使用URL安全base64而不是十六进制。

1.0.0

  • 初始版本

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

推荐PyPI第三方库


热门话题
具有未知数量条件的java If语句   java如何在Spark中使用两个“条件”进行过滤?   雅加达ee为ColdFusion提供的最佳Java ee服务器   java如何在jersey的MessageBodyWriter方法中获取writeTo中的anotations值?   java从脚本文件调用jar文件中的函数   java在执行insert语句后,如何获得id值为的语句?   在OS X上设置OpenCV Java绑定   java使用for循环遍历数组x。以字符串形式返回x的元素,其中每个元素由一个空格分隔   ApacheiClientBuilder为Algolia Java创建的APIClient是线程安全的吗?   java在DFS/BFS算法中获取邻居时避免内存分配?   java使用AES/CBC/PKCS5P加密大文件(2GB)   允许保存/加载列布局的Java DB网格组件   队列大小为1的java Spring调度   跑步带有Java参数的exe   java正则表达式将所有“<”和“>”标记替换为“&lt;”及“&gt;”在<<![CDATA]>标签?   java何时同步变量?