密码保护的数据变得简单。
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毫秒
更改日志
强调重要的变化。
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
- 初始版本