2011-07-15 13 views
6

私はweb administration module for mailserversに取り組んでいます(あなたが見たいのであればオープンソースです)。PHPでSSH256またはSSHA512ハッシュを安全に生成する方法は?

このため、私はDovecotで読み取り可能なハッシュパスワードを生成できる必要があります。 described on their wikiとして、推奨されるパスワードハッシュスキームはSSHA256です(余分なSはソルト用です)。

はまた、これは、このPHPコードのようなものを実装するのに合理的に単純なことができることを説明しています:私は、暗号化について読んだことから、

$salt = 'generate_a_salt_somehow'; 
$hash = hash('sha256', $password . $salt); 

しかし、それは塩漬けハッシュを生成するために、かなり素朴な方法でありますでも、もしあなたがtyping A-E-S in your source codeと間違っているとすれば、私は同じことがこの場合に当てはまると考えました。

暗号に関する洞察があれば、mcrypt、mhashなど、これを行う最も安全な方法についてお聞きしたいと思います。

+0

ああ、最初にハッシュを準備する安全な方法も良いでしょう:) – mikl

+0

http://php.net/manual/en/function.ha sh-hmac.php –

+0

ハッシュは他の実装と一致する必要がありますか?または、サイトごとの一意性は受け入れられますか? – wallyk

答えて

8

あなたがリンクしたDovecot wikiページは、Dovecotが使用する正確なハッシュフォーマットが何であるかを説明しています。 Dovecotはハッシュがどのように見えるかについて期待を持っているので、そのルールで遊ぶ必要があります。

ほとんどのソルトパスワードスキーム(SMD5、SSHA *)塩はパスワードハッシュの後に格納され、その長さは変化します。パスワードをハッシュするときは、平文のパスワードの後ろに塩を付けます(例:SSHA256(パス、塩)= SHA256(パス+塩)+塩)。

だから、PHPでの適切なパスワード生成機能は、次のようになります。PHPで

$hash = "{SSHA256}" . base64_encode(hash('sha256', $password . $salt) . $salt); 
+2

私はこれを最初に動作させることができませんでしたが、実際には '$ raw_output'の第3パラメータをhash()にtrueに設定する必要がありました。そうしないと、base64-encode既に16進数でエンコードされた番号。それ以外の場合は、チップのおかげで:) – mikl

5

パスワード生成機能:

$hash = "{SSHA256}".base64_encode(hash('sha256', $password.$salt, true).$salt); 

必ずしも "真" - 三番目のパラメータ...

+0

あなたの答えが正解ではない理由を私は全く知りませんでした。これは正確にこれが機能するために必要なものです。 – Josh

関連する問題