1. ホーム
  2. python

[解決済み] Pythonで暗号的に安全な乱数を作るにはどうしたらいいですか?

2023-06-26 19:23:59

質問

pythonでプロジェクトを作っているのですが、暗号的に安全な乱数を作りたいのですが、どうしたらいいでしょうか?ネットで調べたところ、通常のランダマイザーで生成された数値は暗号的に安全ではないとのことで、関数 os.urandom(n) は数字ではなく文字列を返すとネットで読みました。

どのように解決するのですか?

を適用するだけで、乱数のリストを得ることができます。 ord が返すバイトに対して os.urandom によって返されるバイトに対して、以下のような関数を実行します。

>>> import os
>>> os.urandom(10)
'm\xd4\x94\x00x7\xbe\x04\xa2R'
>>> type(os.urandom(10))
<type 'str'>
>>> map(ord, os.urandom(10))
[65, 120, 218, 135, 66, 134, 141, 140, 178, 25]

引用 os.urandom のドキュメントを参照してください。

の文字列を返します。 n ランダムバイト 暗号の使用に適した .

この関数は、OS固有の乱数源からランダムなバイトを返します。返されるデータは、暗号アプリケーションにとって十分に予測不可能であるべきですが、その正確な品質はOSの実装に依存します。UNIXライクなシステム上では、この関数は /dev/urandom を照会し、Windows では CryptGenRandom() .