メッセージを30文字の文字列にハッシュする必要があります。この使用法に最適で最も安全なハッシュ関数は何ですか?
12056 次
2 に答える
8
30 文字 (バイト) は 240 ビットです。
32 文字を許可するようにゴールポストを移動できない場合は、おそらく 160 ビットまたは 20 バイトを生成する SHA-1 を使用することになります。Base-64 でエンコードすると、28 文字になります。16 進エンコードを使用すると、40 文字になり、名目上範囲外になります。32 文字の場合は SHA-256 を使用できますが、Base-64 エンコーディングではそのサイズが (44 文字に) 増加し、16 進エンコーディングではサイズが 64 文字に増加します。
16 進エンコードを使用する必要があり、32 バイトにできる場合は、128 ビットを生成する MD5 を使用できますが、新しいシステムには推奨されません。Base-64 エンコーディングでは、MD5 は 24 文字を使用します。それ以外の場合は、最小限の安全なアルゴリズムを使用しているため、まったくお勧めできません。
于 2010-08-21T06:43:46.207 に答える
6
SHA1 を使用して 30 文字にトリムするだけです。
import hashlib
hash = hashlib.sha1("your message").hexdigest()[:30]
SHA1 などの暗号学的に安全なハッシュ関数から文字を切り離しても、そのセキュリティへの影響はごくわずかであることが証明されています (ただし、現在は参照を見つけることができません)。
于 2010-08-21T06:37:16.840 に答える