2011-01-28 31 views
7

英数字の文字列を最大20文字まで出力するハッシュアルゴリズムが必要です。 「英数字」の場合は、[a-zA-Z0-9]を意味します。最大20文字の英数字出力を持つハッシュアルゴリズム

入力は、代替例では正規の形式でUUID S(例えば550e8400-e29b-41d4-a716-446655440000

あるこれらの制限を用いて文字列にSHA1またはMD5ハッシュを変換する方法がありますか?

ありがとうございました。

は、暗号的に安全である必要はありません

EDIT。衝突はデータを不正確にしますが、散発的に発生した場合、私はそのデータと一緒に暮らすことができます。切り捨てMD5またはSHA1は、衝突があまりにも頻繁に起こるようならば、私は知らない

EDIT 2

。今私はそれが20文字にMD5値またはSHA1値を切り捨てるほうが良いかどうか疑問に思っています。

+0

これらのハッシュに望ましいプロパティはありますか?彼らは暗号で安全であるべきか、またはハッシュテーブルに十分に適しているでしょうか? – templatetypedef

+1

SHA1またはMD5のハッシュ文字列を16進数(またはbase64)で印刷し、必要に応じて20文字に切り捨てることはできませんか? –

+1

あなたの目標は何ですか? SHA1ハッシュの20文字の部分文字列を取るだけではうまくいかないのでしょうか? –

答えて

13

GUIDのハッシュから不要な文字をクリップするだけです。良好なハッシュ関数では、ハッシュのどの部分の予測不能性も、その部分のサイズに比例します。必要に応じて、標準の16進数16の代わりに32進数をエンコードすることができます。これは文字当たりのエントロピーを大幅に向上させません(わずか25%)。

暗号化以外の用途では、MD5、SHA1、またはSHA2のいずれを切り捨てるかは関係ありません。どちらもエントロピーに目立たない欠点がありません。

+2

ありがとうございます。私は、100万のUUIDを生成し、SHA1の16進数の最初の20文字を取得しようとしました。衝突はありません。テストスクリプトはこちら:https://gist.github.com/800132 – Giacomo

関連する問題