標準のANSI CランタイムといくつかのPOSIX関数しかないプラットフォームにいくつかのソフトウェアを移植する必要があります。ソフトウェアは、/dev/urandom
からの読み取りによって、ZIPファイルをパスワードで暗号化するための乱数を生成します。 Windowsでは、CryptGenRandom()
を使用して乱数を生成します。私のターゲットプラットフォームでは両方の機能が利用できないので、代替案を見つける必要があります。/dev/urandomから非Unixプラットフォームへの移植
私はlength
ランダムバイトでbuffer
を埋めるために、この思い付いた:
bool zip_random(zip_uint8_t *buffer, zip_uint16_t length)
{
srand(time(NULL));
while(length--) *buffer++ = rand() % 256;
return true;
}
これは仕事をしていませんが、関数は暗号化コンテキストで使用されているので、それが良いアイデアだ場合、私は知りません古いsrand
およびrand
機能を使用してください。だからこそ私のアプローチが受け入れられるのか、それとももっと良い解決策があるのかという質問をしたいのです。
[This](https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful)が面白いかもしれません。 – chrk
暗号化に 'srand()'と 'time()'を使うのは災害です。正しく仕事をするのは難しいでしょう。プラットフォームは何ですか?実際に利用可能なものがない場合は、EGD(エントロピー収集デーモン)などを探す必要があります。またはシュナイダーのFortuna PRNGです。自分自身を発明しようとしないでください。それはランダムではありません –
@ジョナサンリーフラー:それは私が恐れている:)プラットフォームはAmigaOSですので、ここでは多くの選択肢はありません... – Andreas