Python中的随机32位十六进制数字

新手上路,请多包涵

我正在尝试找到一种生成随机的 32 位十六进制序列的好方法,并从 10*78 等大数中获取其随机性。

对于 Python 代码,我还发现了这个:

 ran = random.randrange(10**80)
myhex = "%030x" % ran

这会产生一个 64 位十六进制字符串,但有时结果是 63 甚至 61 个字符,我不确定为什么?我需要它每次都准确地返回 64。

我需要帮助调整上面的代码,以便它始终只返回 64。我不太了解“%030x”部分的工作原理。

我还尝试生成更长的十六进制字符串并缩短它:

 myhex = myhex[:64]

但我仍然看到返回的字符串小于 64。

最后,我只需要从 10*78 之类的大数字派生的 64 个十六进制字符串,每次都返回。

我选择的解决方案

import random

ran = random.randrange(10**80)
myhex = "%064x" % ran

#limit string to 64 characters
myhex = myhex[:64]

print(myhex)

似乎@ScottMillers 下面的回答是我找到答案所需的关键,所以我选择他的答案作为解决方案,但想在这里发布对我有用的最终代码。

谢谢大家

原文由 Norman Bird 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

"%030x" 表示显示 至少 30 位数字的关联值,必要时在前面填充 0。因为你的数字几乎总是比那个大,所以这对你没什么用。

听起来您需要 "%064x"

原文由 Scott Hunter 发布,翻译遵循 CC BY-SA 3.0 许可协议

在现代 Python 发行版中,新库 secrets 使它变得简单并且可能正是您所需要的。从文档:

secrets 模块用于生成适用于管理数据(例如密码、帐户身份验证、安全令牌和相关秘密)的加密强随机数。

特别是,应优先使用 random 模块中的默认伪随机数生成器,后者是为建模和仿真而不是安全或密码学而设计的。

对于 Python 3.6 及更高版本,试试这个:

 import secrets
secrets.token_hex(32)
#'17450056b398cbeda1fa7e4fc25d4fb169ade2b1266892e2cecab56b12fb900b'

https://docs.python.org/3/library/secrets.html#module-secrets

对于早期版本的 Python,有一个可用的反向端口 ( python2-secrets )。

    pip install python2-secrets

原文由 sww314 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题