如何在Python中生成16字节的随机数并对它们进行异或运算?

3

我正在编写自己的SSL版本,为了创建主密钥,我需要创建两个16字节的随机数并对它们进行异或运算。有人能帮我做到这一点吗?


1
他们需要多随机? - Peter Wood
可能是如何在Python中生成指定长度的随机数Python中十六进制数字的按位异或的重复问题。如果您不知道如何执行XOR,您真的认为编写TLS库是一个好主意吗? - jww
3个回答

7
我希望您能为科学目的担任翻译工作... SSL是非常重要的。而且 - 像加密领域一样 - 实现中可能会出现很多问题... 祝你好运!但作为研究/改进例如 OpenSSL 的努力,这将是非常受欢迎的努力!
生成随机字节:
从 Python 3.6 开始,Python 中有 secrets 模块。 secrets.token_bytes(16) 将输出 16 个随机字节。
from secrets import token_bytes
print(token_bytes(16))

对于 Python <= 3.5:

import os
print(os.urandom(16))

异或字节

为了对长度均为16的字节ab进行异或操作

byteorder = "little"
bytesize = 16
tmp_int = int.from_bytes(a, byteorder) ^ int.from_bytes(b, byteorder)
return tmp_int.to_bytes(16, byteorder)

这只是我做的一个小项目...一个小版本的SSL,没什么大不了的。非常感谢! - ransar

2

关于什么?

int(os.urandom(16).encode('hex'),16) ^ int(os.urandom(16).encode('hex'),16)

1
通常它取决于操作系统和计算机硬件。在Linux上,您可以使用/dev/random(从中读取16个字节),但首先请阅读random(4)。请非常小心,这是一个非常敏感的问题,很多事情可能会悄悄地出错。顺便说一句,我认为从头开始重写SSL是不合理的(除了学习目的)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接