25

私が収集できるものから、実際arc4random()よりもはるかに優れた乱数を生成しますが、それをシードする方法を見たことrand()なく、. 方法はありますか?srand()

4

5 に答える 5

23

これは、arc4random が行うように設計されていることではありません。ドキュメントに記載されているように:

このarc4random()関数は、高品質の 32 ビット疑似乱数を非常に迅速に提供します。arc4random()で説明されているカーネルの強力な乱数サブシステムから定期的に自分自身をシードしますrandom(4)

とにかくエントロピーソースから再シードされるため、手動でシードしても何も得られず、実際、そのような方法は存在しません。

于 2010-11-24T14:04:52.977 に答える
8

iOS 9 では実際にこれを行うことができます。

import GameKit

let source = GKARC4RandomSource(seed: "hello world".data(using: .utf8)!)
source.dropValues(1024)
source.nextInt() // <-- your number

ドキュメントによると:

Arc4 ベースのランダム ソースには、反復可能な初期シーケンスがあります。難読化に使用する場合は、N の値を最初から削除する必要があります。N は、最初のシーケンスが確実にフラッシュされるように、768 より大きい任意の数にする必要があります。

したがって、同じシード データを使用し (明らかに!、運用コードでは使用せずに)、同じ数のドロップされた値を使用する限り、同じ結果が得られます。

于 2016-08-29T02:17:14.357 に答える
1

以下を使用して、arc4random にランダム性としてバイト シーケンスを追加できます。arc4random_addrandom()

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/arc4random.3.html

于 2011-03-14T21:53:04.040 に答える
-1

実際にシードする必要はありません...最初の呼び出しでシードされます。電話してドキュメントを確認する

man arc4random

あなたのシェルで。説明の下の関連する行は次のとおりです。

There is no need to call arc4random_stir() before using arc4random(),
since arc4random() automatically initializes itself.
于 2010-11-23T07:23:52.937 に答える