256位整数的256位字符串表示方法

3
在Python中,我正在使用Crypto包生成256位长度的随机数。用于此目的的函数为:
import Crypto.Random.random as rand
key = rand.getrandbits(256)  

这将得到类似以下内容的结果:
112699108505435943726051051450940377552177626778909564691673845134467691053980

现在我的问题是如何将这个数字转换为所有ASCII字符的字符串?是否有内置函数可以做到这一点,或者我需要将其转换为二进制并拆分为八个一和零的块,然后自己完成?提前致谢。

https://dev59.com/E3E95IYBdhLWcg3wi-ee - dstromberg
2
只需将整数传递给bin()内置函数。如果您不想要它,可以切掉前导的“0b”。 - Tim Peters
1个回答

0

我不知道它是否内置,但我怀疑。

但是自己做并不像重新解释数据为字节那么容易。这是因为Ascii是一种7位编码方案。最高有效位始终为零。

最简单的方法是将您的int转换为打包的字节数组(to_bytes)[1],然后从每个字节中丢弃一个位,例如通过右移。这浪费了1/8的熵,但使程序更清晰。

这仅适用于您正在使用加密安全的随机数生成源。这意味着每个位都有相等的可能性成为一或零 - 也就是说,每个位都是均匀分布且独立于所有其他位的。[2]

[1]http://docs.python.org/3/library/stdtypes.html#additional-methods-on-integer-types [2]https://crypto.stackexchange.com/questions/10300/recasting-randomly-generated-numbers-to-other-widths


1
经过更多的研究,我找到了这个链接。这段代码完成了工作。非常感谢你们的回答。我之前不知道ASCII使用了多少位,这是一个非常有帮助的描述。 - DoubleDouble

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