我有一个密码生成器:

import random, string

def gen_pass():

foo = random.SystemRandom()

length = 64

chars = string.letters + string.digits

return ''.join(foo.choice(chars) for _ in xrange(length))

根据文档,SystemRandom使用os.urandom,它使用/ dev / urandom来抛出随机的cryto位。在Linux中,您可以从/ dev / urandom或/ dev / random获取随机位,它们都使用内核可以获得的任何熵。可以使用tail / proc / sys / kernel / random / entropy_avail检查可用熵的数量,这将返回一个数字,如:129.更多的熵可用数量。 / dev / urandom和/ dev / random之间的区别是,如果熵_avail足够高(如至少60),/ dev / random将只会吐出位,并且/ dev / urandom将总是吐出位。该文档说/ dev / urandom对加密是有好处的,你只需要使用/ dev / random来执行ssl证书等。

我的问题是,gen_pass是否会永久地进行强密码级密码?如果我尽可能快地调用这个功能,我会停止在某个时候得到强的cryto位,因为熵池耗尽?

这个问题也可能是为什么/ dev / urandom总是产生强大的cryto位,而不在乎熵_avail?

有可能/ dev / urandom被设计为使其带宽被你猜测的周期数量与熵量相关联,但这是猜测,我找不到答案。

这也是我的第一个stackoverflow问题,请批评我。我很担心,当知道答案的人可能知道背景时,我给了很多背景。

谢谢

更新

在/ dev / urandom读取时,我写了一些代码来查看熵池:

import subprocess

import time

from pygooglechart import Chart

from pygooglechart import SimpleLineChart

from pygooglechart import Axis

def check_entropy():

arg = ['cat', '/proc/sys/kernel/random/entropy_avail']

ps = subprocess.Popen(arg,stdout=subprocess.PIPE)

return int(ps.communicate()[0])

def run(number_of_tests,resolution,entropy = []):

i = 0

while i < number_of_tests:

time.sleep(resolution)

entropy += [check_entropy()]

i += 1

graph(entropy,int(number_of_tests*resolution))

def graph(entropy,rng):

max_y = 200

chart = SimpleLineChart(600, 375, y_range=[0, max_y])

chart.add_data(entropy)

chart.set_colours(['0000FF'])

left_axis = range(0, max_y + 1, 32)

left_axis[0] = 'entropy'

chart.set_axis_labels(Axis.LEFT, left_axis)

chart.set_axis_labels(Axis.BOTTOM,['time in second']+get_x_axis(rng))

chart.download('line-stripes.png')

def get_x_axis(rng):

global modnum

if len(filter(lambda x:x%modnum == 0,range(rng + 1)[1:])) > 10:

modnum += 1

return get_x_axis(rng)

return filter(lambda x:x%modnum == 0,range(rng + 1)[1:])

modnum = 1

run(500,.1)

如果运行这个并运行:

while 1 > 0:

gen_pass()

那么我很可靠地得到一个如下图形:

在运行cat / dev / urandom时,图形显示smiler,并且cat / dev / random丢弃为空,并保持低速非常快(这也只读出每3秒左右的字节)

更新

如果我运行相同的测试,但有六个gen_pass()实例,我得到这个:

所以看起来好像是有这样的情况,我有足够的熵。我应该测量密码的生成率,并确保其实际上被限制,因为如果不是那样的事情可能会发生。

更新

这表示,一旦池只有128位,urandom就会停止拉熵。这与上述结果非常一致,意味着在这些测试中,我经常生产垃圾密码。

我以前的假设是,如果熵值足够高(高于64位),那么/ dev / urnadom输出是好的。这不是这样,/ dev / urandom被设计为为/ dev / random留下额外的熵,以防需要它。

现在我需要找出一个SystemRandom调用需要的真正随机位数。

python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来获得良好的加密相关推荐

  1. python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来实现好的cryp吗

    我有一个密码生成器:import random, string def gen_pass(): foo = random.SystemRandom() length = 64 chars = stri ...

  2. python中sys用法_python中os和sys模块的区别与常用方法总结

    python 的 python中os和sys模块的区别与常用方法总结 前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看 ...

  3. python查看模块功能_Python模块Os系统功能

    Os模块简介系统功能 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关. OS模块使用实例 执行dos命令 Python os.sys ...

  4. python os.walk模块_Python之os.walk和os.path.walk

    一.os.walk() 函数声明:os.walk(top,topdown=True,οnerrοr=None) (1)参数top表示需要遍历的顶级目录的路径. (2)参数topdown的默认值是&qu ...

  5. python os模块详细_python之os模块详解

    importos#os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径#print(os.getcwd()) # G:\python二期\一月\day18 #os.curdi ...

  6. python的os模块使用_Python之os模块的常见用法

    转自:http://zhpfbk.blog.51cto.com/4757027/1561926 在Python的标准库os模块中包含普遍的操作系统功能 os 模块引入的方法是: import os 以 ...

  7. python里os什么模块_python中os模块的主要方法

    print(os.getcwd()) # 获取当前的工作目录 print(os.chdir(r'D:\pycharm')) #改变当前脚本目录 print(os.curdir) #返回当前目录 pri ...

  8. python tabula 使用方法_Python中os.walk()的使用方法

    os.walk()主要用来扫描某个指定目录下所包含的子目录和文件.这篇文章将通过几个简单的例子来说明python中os.walk()的使用方法. 假设我们的test文件夹有如下的目录结构: 我们首先用 ...

  9. python中os什么意思_python里os是什么意思?

    os是operation system(操作系统)的缩写,这个库就是对操作系统的封装.os模块提供了多数操作系统的功能接口函数. 常用的os模块命令: 1.os.name--name顾名思义就是'名字 ...

最新文章

  1. 文本文件 java,java 写文本文件
  2. UVa 11388 - GCD LCM
  3. 微软亚太区资料科学总监:R 语言是 VS 生态第一顺位
  4. mysql8以上的连接配置
  5. php 数据类型 map,es6中Set和Map的对比介绍(附代码)
  6. ip=request.servervariables(Remote_Addr)获得ip显示::1
  7. nginx websocket 代理
  8. RGB图像任意角度旋转
  9. JUC与JVM并发编程学习笔记02
  10. 波束形成matlab程序,mVDR波束形成matlab程序
  11. easyUI设置表格中的背景色
  12. 机器学习入门好文,强烈推荐
  13. poi-ooxml-lite:5.0.0 与 poi-ooxml-schemas:4.1.1 正式环境冲突
  14. Docker:架构分解
  15. 【Codeforces Round #185 (Div. 2) D】Cats Transport
  16. 可用的公开 RTSP/ RTMP 在线视频流资源地址(亲测可行)
  17. 在EXCEL中通过VBA实现批量读取文件夹内的文件名称
  18. 论文阅读:U-Net++: Redesigning Skip Connections to Exploit Multiscale Features in Image Segmentation
  19. 中职计算机应用专业核心素养的,基于核心素养的中职计算机应用专业“课程革命”...
  20. 愿我们在路上聪明绝顶但不绝顶

热门文章

  1. 前端技术分享:算法入门之“二分算法”
  2. python使用环境_使用python之环境管理
  3. 2.Java之路(Java语言开发环境搭建)
  4. VTK:点定位器可视化用法实战
  5. boost::mpl::minus相关的测试程序
  6. boost::cuthill_mckee_ordering用法的测试程序
  7. boost::geometry::strategy::distance::cross_track用法的测试程序
  8. boost::fusion::push_front用法的测试程序
  9. boost::reference_wrapper用法实例
  10. Boost:BOOST_ASSERT用法的测试程序