螺旋包装

txscrypt的Python项目详细描述


txscryptscryptTwisted友好包装。scrypt 是一个键派生函数。这是你想用的东西 为了安全地存储用户的密码,如果您正在编写密码 存储库。(如果不是,请使用一个。)

https://dl.dropbox.com/u/38476311/Logos/txscrypt.png

如何存储密码?

很简单。

fromtxscryptimportcomputeKeyd=computeKey(password)d.addCallback(storeSomewhere)

computeKey是一个函数。你给它明文密码,在 字节。如果你的用户给你一个Unicode密码,编码它 第一。你会得到一个延迟的,在某个时候,用一个 神奇的字节串。储存起来。

好吧。如何检查密码?

fromtxscryptimportcheckPasswordd=checkPassword(stored,provided)

在这段代码中,stored是从computeKey得到的。 provided是用户提供的密码。给它同样的 在将密码传递给 computeKey。例如,如果是Unicode,则对其进行编码。

你会被推迟。在未来的某个时候 如果密码匹配,True,如果不匹配,False

为什么神奇的字符串base64是编码的?

你不应该关心里面的东西。

它不完全是base64编码的,但它确实包含一些base64 编码部分。如果不是的话,它会有一堆nul字节和其他 它包含了大量的内容(即不可打印的ascii),这使得 存储材料结块。

如果您一定要知道,它看起来是这样的:

COMMENT:PARAMS:ENCODED_KEY:ENCODED_SALT

其中COMMENT当前总是txscryptPARAMS是 包含用于调用scrypt散列的参数的json对象 函数(n,r,p,buflen),ENCODED_KEY是base64编码的密钥, ENCODED_SALT是base64编码的salt。

早期版本的txcrypt使用了scrypt生成的原始字节。 一些第三方工具会在第一个nul字节后对这些字符串执行位操作。 不幸的是,这是紧接着“scrypt”这个词之后的 字符串的第一个字节。

但是盐呢?

txcrypt帮你处理这个。

(它使用操作系统计算足够长的盐) 密码安全的随机数生成器。目前,这个 长度为256位。)

但是定时攻击呢?

txcrypt帮你处理这个。

(它依赖于足够长的盐。可能有一面 与在同一个上多次执行scrypt相关的通道 但据作者所知 显示为攻击。)

但是让线程池饿死呢?

txcrypt帮你处理这个。

(它创建了一个新的线程池,仅用于在中运行scrypt。这意味着 scrypt不与dns解析等竞争 您传递给deferToThread

但是关闭线程池呢?

txcrypt帮你处理这个。

(它告诉reactor在开始时停止线程池 关闭程序。那就意味着你必须有反应堆 为任何计算工作而运行。)

何时创建自己的包装器对象?

如果要更改:

  • 盐的长度
  • 线程池
  • 任何默认的scrypt散列参数(n,r,p,buflen)

所以,基本上,从来没有。如果迭代次数不安全,请将 TXScrypt的错误,所以可以修改。

更改日志

3.0.0

与以前版本的更改不兼容!

内部格式现在存储参数,以便更改它们 (例如,升级迭代次数)将导致平滑 向前过渡。

2.0.1

自述文件更新和测试套件更新。

2.0.0

与以前版本的更改不兼容!

  • 现在使用新公开的hash函数making密钥派生 完全确定。
  • maxTime参数已被删除。

1.1.1

  • 删除文档和 _全部

感谢matt haggard的错误报告!

1.1.0

  • 仅在首次使用时启动线程池
  • 当反应器开始关闭时停止线程池

1.0.0

与以前版本的更改不兼容!

  • 删除不推荐的VerifyPassword API
  • 对盐位使用较少的高质量熵
  • 使用术语“盐”,与scrypt纸的一致性
  • Base64s输出,防止其他软件被NUL字节阻塞
  • 内部重写,更易于测试

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

推荐PyPI第三方库


热门话题
如何在Java中以反射方式使用泛型参数调用方法?   java分配给另一个变量的变量是否更改(原始变量更改)第二个变量是否更改?   java没有此类元素异常(警告:服务器未提供任何stacktrace信息)   java检查用户是否经过密码验证或与某个提供者进行了验证   java在向“价格”和“数量”列单元格添加数据时更新JTable中的“金额”列单元格   Android Studio找不到java编译器   java“在foo类的公共方法中,哪个变量(实例或本地)起作用?”   java动态Log4j2 LogfilePath   java使用OO编程避免多个嵌套if   java有没有办法在IntelliJ更改跟踪中突出显示未保存或更改的行   Java中两个矩阵相乘的数组   java打印包含阿拉伯字符的字符串会导致问号。如何修复?   java为什么声明整型静态会导致代码中出现错误?   java在使用@Bean Spring注释创建Bean时遇到异常   java是否将JavaCV添加为依赖项,以便在Raspberry PI上运行?   java如何使用trycatch测试注入的mock   java如何在不同的环境(开发、测试、生产)中维护相同的数据表?   java将Char转换为KeyEvent