2016-07-12 1 views
2

私はJbossでビルドを使用していますlogin-module。ユーザーがパスワードとして入力したものをエンコードし、dbの暗号化されたパスワードと比較する必要があります。私は自分のアプリケーションをデバッグするとき、私は次の行を使用してDBにパスワードを格納するためにハッシュアルゴリズムとハッシュコーディング

<module-option name="hashAlgorithm" value="MD5"/> 
<module-option name="hashEncoding" value="base64"/> 

newUser.setPassword(DatatypeConverter.printBase64Binary(purePassword.getBytes("UTF-8"))); 

それが表示されます: から= MTIzNDU2Nzg=

  • 暗号化されたパスワードDBから

    • 暗号化されたパスワードをユーザーログイン= JdVa0oOqQAr0ZMdtcTwHrQ==

    質問

    1. 何が起こっていますか?いつjbossはbase64アルゴリズムを使用するのですか?md5
    2. hashAlgorithmhashEncodingの違いは何ですか?
  • +0

    〜100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 password_hash、PBKDF2、Bcryptなどの関数を使用します。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 [パスワードを安全にハッシュする方法、The Theory](http://security.stackexchange。セキュアスタックエクスチェンジャーのcom/questions/211/how-to-securely-hash-passwords/31846#31846) OWASP(オープンWebアプリケーションセキュリティプロジェクト)[パスワード保存チートシート](https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Leverage_an_adaptive_one-way_function)を参照してください。 – zaph

    答えて

    1
    1. 何が起こっていますか?いつjbossはbase64アルゴリズムを使用し、いつmd5

    MD5はハッシュアルゴリズムであり、Base64は出力文字エンコーディングです。

    character encodingは、どの文字が1バイトまたは一連のバイトに対応するかを定義します。

    MD5は、文字ではなく8バイトの16バイト出力を生成する暗号化ハッシュアルゴリズムです。すべての8ビットバイトが印刷可能な文字であるわけではありません。

    Base64は、バイト配列を受け取り、印刷可能な文字列を生成します。一般的には、バイトの配列を印字可能な文字列にエンコードする必要があります。

    1. hashAlgorithmとhashEncodingの違いは何ですか?

    いくつかのハッシュ関数は、16進数またはBase64のような出力エンコーディングhashEncodingをハッシュするために使用されるような等MD5、SHA1、SHA-256のようなハッシュアルゴリズムhashAlgorithmの仕様を可能にします。これにより、選択されたハッシュアルゴリズムと選択された出力エンコーディングを1回の呼び出しでハッシュすることができます。

    -1

    私はあなたが新しい子供であることを確認しましたjboss login-moduleです。私に耳を傾けてください。あなた自身で暗号化を混乱させる必要はありません。あなたはorg.jboss.security.auth.spi.Utilのjbossビルドを持っています。

    newUser.setPassword(Util.createPasswordHash("MD5", "base64", null, name, purePassword)); 
    
    +0

    パスワードをハッシュするだけで安全ではなく、MD5については悪いことですが、レインボーテーブルがあります:[RainbowCrack](http://project-rainbowcrack.com)と [List of Rainbow Tables](http:// project -rainbowcrack.com/table.htm) – zaph

    +0

    @zaph Sirですが、私は 'username'の形で塩を使用しています –

    +0

    [createPasswordHash documentation](https://docs.jboss.org/jbossas/javadoc/4.0.4 /security/org/jboss/security/Util.html#createPasswordHash(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String)) * username - - デフォルトバージョンでは無視されます*。しかし、塩漬けのMacを使用するだけでは、パスワードのセキュリティには十分ではありません。質問への私のコメントを参照してください。 – zaph

    関連する問題