0

順序が不可欠な整数のリストがあります。リストは、最大 2^24 要素まで、非常に大きくなる可能性があります。元の値とその頻度が同じままになるように「暗号化」したいと思います。基本的に、リストをシャッフルします。Java.Random. この手順では、PRNG に送信者と受信者が共有するキーをシードし、任意のランダム ソート アルゴリズム (Fisher-Yates など) を適用します。このようにして、キーを知っている受信者は、シャッフルを「元に戻す」ことができます。

これが非常に悪い考えであることはわかっていますが、実際に SecureRandom を使用するとより良くなるでしょうか? その使用が暗号化に適していることは理解していますが、数字の大きなリストを出力するために使用することを意図しているとは思いません。

(全体として、「独自のアルゴリズムを実行しないでください」が暗号101であることは知っていますが、これまでのところ、「並べ替える」だけで値と頻度を元のリストに保持するという、私が望む特性を持つ他のアルゴリズムを見つけていません.そのようなものが存在する場合は、それを教えていただけますか?)

ありがとうございました!:)

4

1 に答える 1

1

あなたのアイデアは問題ありません。安全な疑似ランダム ストリームを使用する必要があるだけです。これを作成する最も簡単な方法は、CTR モードの AES などのストリーム暗号です。

int Random(int count)ストリームから 8 バイトを読み取り、その整数モジュロ カウントを取得し、それをフィッシャー イェーツ シャッフルのビルディング ブロックとして使用する関数を実装します。これは完全に均一ではありませんが、実際には問題にならないほど十分に近いものです。妄想的な場合は、8 バイトではなく 16 バイトにします。

于 2013-01-18T21:40:36.983 に答える