2

C で、長さ 40 文字 (30 バイト?) のランダムな Base64 文字列を生成する関数を作成するように依頼されました。しかし、Base64 のフレーバーがわからないので、多くのバージョンの Base64 と互換性がある必要があります。

私に何ができる ?最良の選択肢は何ですか?

4

1 に答える 1

4

すべての Base64 エンコーディングは、62 文字である [0-9A-Za-z] の使用など、いくつかの点で一致しています。したがって、完全な 64^40 の組み合わせを取得することはできませんが、62^40 の組み合わせを取得することはできます。62 を法とする各桁の乱数を生成することもできます。または、システムから必要なエントロピーの量を減らすために、より慎重にスライスすることもできます。たとえば、32 ビットの乱数が与えられた場合、一度に 6 ビット (0..63) を取得し、それらのビットが 62 または 63 の場合は破棄し、そうでない場合は Base64 の 1 桁にマップします。この方法では、40 文字の文字列を作成するのに約 8 個の 32 ビット整数のみが必要です。

このシステムにセキュリティ上の考慮事項がある場合は、「異常な」Base64 番号を生成した場合の結果を考慮する必要があります (たとえば、Base64 番号がわずかなコーパスで 62 個のシンボルしかないという点で特別であることを攻撃者が検出する可能性があります。それは問題になりますか?)。

于 2013-02-12T14:25:56.743 に答える