1

26文字未満で表現できるハッシュが必要です。Md5は32文字の長さの文字列を生成します。これをベース36に変換すると、どれだけ優れているでしょうか。

暗号化ではなく、入力時間と入力データに応じて各入力を基本的に識別する一意性のためにハッシュが必要です。現在、私はこれを次のように考えることができます

        $hash=md5( str_ireplace(".","",microtime()).md5($input_data) )  ;
        $unique_id= base_convert($hash,16,36) ;

このようにするか、ハッシュサイズを小さくするcrc32を使用する必要がありますが、それほどユニークではないのではないでしょうか。

4

1 に答える 1

1

もっと簡単な解決策が考えられます。

あなたの声明によると、あなたは26文字のスペースを持っています。しかし、私がキャラクターであると理解していることと、あなたがキャラクターであると理解していることを明確にするために、いくつか掘り下げてみましょう。

MD5ハッシュACC。ウィキペディアに16バイトのハッシュを生成します。

CRC32アルゴリズムは、4バイトのハッシュを処理します。

私は「文字」(最も単純な意味で)をASCII文字であると理解しています。各ASCII文字(例:A = 65)は8ビット長です。

MD5アルゴリズムが生成するのは16バイト*1バイトあたり8ビット=128ビット、CRC32は32ビットです。

ハッシュは数学的に一意ではなく、「一意である可能性が高い」ことを理解する必要があります。

したがって、私の解決策は、あなたの説明があれば、ハッシュのビットをASCII文字として表すことです。

MD5とCRC32のどちらかしか選択できない場合、答えはMD5になります。ただし、SHA-1 160ビットハッシュ<26文字の文字列を適合させることもできます(20 ascii文字の長さになります)。

各ハッシュが使用するシンボルのセットが気になる場合は、両方のハッシュがセット[A-Za-z0-9]に含まれています(私は信じています)。

最後に、本質的に数値をある基数から別の基数に変換しても、数値は変わらないため、アルゴリズムの強度は変わりません。数字の表現方法を変えるだけです。

于 2011-08-14T22:47:16.830 に答える