在python中我使用Crypto package生成一个长度为256位的随机数。这样做的功能是
import Crypto.Random.random as rand
key = rand.getrandbits(256)
这就是:
112699108505435943726051051450940377552177626778909564691673845134467691053980
现在我的问题是如何将此数字转换为所有ascii字符的字符串?这样做是否有内置功能,或者我是否需要将其转换为二进制并将其拆分为8个零和0的块并自己完成?
提前吃完。答案 0 :(得分:0)
我不知道它是否内置,但我对此表示怀疑。
但是,自己动手并不像将数据重新解释为字节那么容易。这是因为Ascii是一种7位编码方案。最重要的位始终为零。
最简单的方法是将int转换为打包的字节数组(to_bytes
)[1],然后从每个字节中丢弃一个位,例如:通过右移。这浪费了你的熵的1/8,但是制作了一个更干净的程序。
这只能起作用,因为您正在使用加密安全的随机数生成源。这意味着每个位具有相等的概率为1或0 - 也就是说,每个位均匀分布并且独立于所有其他位。 [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