私は、バイトのセット(たとえば、10または15バイト)を取得して、そのバイトのリストを生成するシードのリストを返すことができるバイトのPRNGを構築しようとしています。私は暗号化について心配していませんが、それはほぼ均一に分散されている必要があり、可能なすべての2 ^ 8の組み合わせにヒットする必要があり、ときどき行き詰まることなく番号を繰り返すことができる必要があります。
問題は、私が読んだほとんどのアルゴリズムが暗号を使用していることです。これはおそらく繰り返しが許可されないことを意味するか、損失を引き起こして関数を逆にすることをせいぜい非現実的にするモジュラスまたは非循環シフトを使用します。また、アルゴリズムがカウントを使用した場合、バイトリスト入力は生成時に内部PRNGのカウンターが何であったかを認識しないため、逆方向に作業するのは困難です。
私が探しているのは、ケーキを食べて食べ過ぎの状況であることに気づきましたが、私が見逃していた別の解決策がないことを確認したかったのです。
検索中に、同様の要件を持つこの投稿に出くわしました。私はC#で書いていましたが、実際には構文は重要ではありません。
私が自分で作成しようとしたすべてのアルゴリズムは暗号であるため、繰り返しに失敗したり、分散が均一でなかったりします。インバージョン、サーキュラーシフト、シードマスキングを使用しました。