从相机拍摄的照片中得到的散列真的是随机的吗?

2024-09-19 23:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用网络摄像头拍摄一张照片,对图像的输出字节进行散列(sha-512)。这是一个“真”的随机数发生器吗?在ent测试中,它的性能很差。我怀疑这是因为它没有任何特殊字符,只有字母和数字。有什么哈希算法比sha-512更适合这种情况?
这是我的密码:

import cv2
import hashlib

webcam = cv2.VideoCapture(0)
check, frame = webcam.read()
framebytes = frame.tobytes()
hash = sha512(str(framebytes).encode('utf-8')).hexdigest()

(在这里谈论hash
我目前正在一个Web服务器(flask)中使用它,所以我无法提供字节(尝试创建一个随机api,用作种子)


Tags: 图像import网络字节hash性能cv2frame
1条回答
网友
1楼 · 发布于 2024-09-19 23:30:17

如果您真的想这样做,那么您的代码基本上是正确的。除:

  • 从字节到字符串再转换回来是没有意义的
  • 直接请求摘要,而不是它们的十六进制表示

例如:

from cv2 import VideoCapture
from hashlib import sha512

webcam = VideoCapture(0)
check, frame = webcam.read()

if not check:
  raise ValueError("Unable to read a frame")

digest = sha512(frame).digest()

也就是说,您最好使用^{},或者像^{}这样的包装器,让您的操作系统来处理事情。此服务受OpenSSL等程序的信任,并且应该比您正在尝试的更可靠

如果你真的想使用网络摄像头,我建议你将熵混合到系统中,同时仍然使用urandom来获取随机值。请注意,在Linux下,您可以将网络摄像头(甚至原始网络摄像头数据)中的散列字节写入/dev/random,以加密安全的方式将其合并

如果你真的想自己动手,我建议你看看Fortuna PRNG,看看更大的系统是如何处理熵提取和它们试图防御的攻击的

相关问题 更多 >