2013-11-16 3 views
2

в python Я использую для генерации случайного числа длиной 256 бит. Функция для этого является256-битное целочисленное число до 256-битного строкового представления

import Crypto.Random.random as rand 
key = rand.getrandbits(256) 

Это дает что-то вроде:

112699108505435943726051051450940377552177626778909564691673845134467691053980 

Теперь мой вопрос является как я преобразовать это число в строку всех символов ASCII? Есть ли встроенная функция для этого или мне нужно преобразовать ее в двоичную и разбить ее в блоках из восьми и нулей и сделать это самостоятельно?

Заблаговременно.

+0

http://stackoverflow.com/questions/2267362/convert-integer-to-a-string-in-a-given-numeric-base -in-python – dstromberg

+1

Просто передайте целое число в встроенную функцию bin(). Отрежьте ведущий «0b», если вы этого не хотите. –

ответ

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

После нескольких исследований я нашел это [ссылка] (http://stackoverflow.com/questions/7396849/convert-binary-to-ascii-and-vice-versa-python) этот код выполняет задание. Большое спасибо за ваши ответы. Я не знал ничего о том, сколько бит использовал ascii. Это было действительно полезное описание. – DoubleDouble

Смежные вопросы