2016-12-15 23 views
1

私は私の暗号化キーとして使用できる32ビット文字列を作成したいと思います。私のアプローチは、最初にそれをハッシュするだろうSHA1ハッシュ文字列を32ビット文字列に切り捨てる方法

'I am a string' 

hashed_string = Digest::SHA1.hexdigest('I am a string') # => 'bd82fb0e81ee9f15f5929e0564093bc9f8015f1d' 

そして、ちょうど最初の32個の文字を使用すると:

この文字列/キーは、プレーンテキスト文字列、例えば由来する必要があります
hashed_string[0..31] # => 'bd82fb0e81ee9f15f5929e0564093bc9' 

しかし、私はより良いアプローチが必要であると感じています。また、2つの入力文字列が似たキーを導き出す危険性があるかどうかはわかりません。

もっと良い方法はありますか?私はthis postが切り捨てに触れたのを見ましたが、そこに私に訴える答えを見つけることができません。

+0

gem [pbkdf2](https://github.com/emerose/pbkdf2-ruby)は、通常の1つはそのような関数を使用してパスフレーズから鍵を派生させます –

+4

あなたはビット対バイトについていくらか混乱しているようです。 SHA1ハッシュは160ビットです。 'hexdigest'はそれらのビットの[16進](https://en.wikipedia.org/wiki/Hexadecimal)表現を返します。各16進数字は4ビットを表します。したがって、最初の32文字を取ると、32×4 = 128ビットになります。とにかく、確かによりよいアプローチがありますが、まずは解決しようとしている問題を知る必要があります。あなたは "暗号化キー"を生成したいのですが、目的は何ですか?あなたは何を暗号化していますか、どのように暗号化していますか?なぜ32ビット(*非常に*暗号化キーの略)? –

+0

質問の変更はどうですか? '32ビット文字列'と '32文字の長さ文字列'は2つの異なるものです。 – lcguida

答えて

2

あなたがしたい場合は、あなたの(弱い)パスワードのうち32ビットの文字列:同じ情報量も8桁の16進数で表示することができ

Digest::SHA1.digest('I am a string').unpack('B32').first 
#=> "10111101100000101111101100001110" 

Digest::SHA1.hexdigest('I am a string')[0,8] 
#=> "bd82fb0e" 

または4アスキー文字:

Digest::SHA1.digest('I am a string')[0,4] 
#=> "\xBD\x82\xFB\x0E" 
関連する問題