首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用安全PRNG生成密码

使用安全PRNG生成密码
EN

Code Review用户
提问于 2014-08-15 06:17:38
回答 1查看 670关注 0票数 1

使用安全程序生成密码的最佳方法是什么?在Python中,我可以简单地使用os.urandom。对此有什么建议吗?

代码语言:javascript
复制
 _ = require('underscore')

exports.gen = (n=10) ->
  throw new Error 'Not a number!' if typeof(n) isnt 'number'
  throw new Error 'Prefered (n): [10..128]' if n < 10 or n > 128
  chars = (String.fromCharCode(i) for i in [33..126]).join ''
  _.times(n, -> chars[(Math.random() * chars.length) | 0]).join ''
EN

回答 1

Code Review用户

回答已采纳

发布于 2014-08-15 14:32:26

在密码模块:os.urandom中找到了与crypto.randomBytes等价的内容。该模块还包含了您可能需要的密码哈希等大多数其他功能。

若要使用与当前代码相同的密码字符集,可以执行以下操作

代码语言:javascript
复制
exports.gen = (length = 10) ->
  throw new Error 'Length is not a number!' if typeof length isnt 'number'
  throw new Error 'Length must be [10..128]' unless 10 <= length <= 128

  range = 126 - 33
  buffer = require('crypto').randomBytes length # note: may throw an error

  (String.fromCharCode(33 + (range * c / 255) | 0) for c in buffer).join ''

我改变了一些小事情

  • length而不是n
  • 稍微多一点描述性错误信息,即什么不是数字,对于糟糕的长度值使用更严厉的措辞(“更喜欢”碳化硅使它听起来好像只是一个建议,但实际上它是一个要求)
  • CoffeeScript有类似于Python的链式比较,因此可以使用10 <= length <= 128
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/60107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档