2017-05-03 5 views
1

私はchar配列にパスワードを保存していますが、それらを再度取得している間に私はString.ValueOf(char[] array)メソッドを直接呼び出しています。形成されたStringをStringプールに格納しますか?はいの場合、ハードコードされたパスワードを、ハッシングや暗号化技術を使用せずに、より安全に保存するにはどうすればよいですか?Stringメソッドを直接呼び出すと、そのStringもStringプールに格納されますか?

例:

public class TestUser { 
    public static void main(String[] args) 
    { 
     User u1 = new User(); 

     System.out.println("User Name is "+u1.getUserId()); 
     System.out.println("Password is "+String.valueOf(u1.getPassword())); 

    } 
} 

説明してください。

+2

"結成された文字列を文字列プールに格納しますか?"いいえ –

+1

あなたのアプリはあなたのユーザーのパスワードがわからないのが理想的です。 'ui.getPassword()'への呼び出しは、平文のパスワードではなく、暗号化/文字化けした文字を返さなければなりません。暗号化されたパスワードだけを格納する必要があります。 –

+0

@AndyTurnerありがとう –

答えて

0

String.valueOf(char[])のドキュメントは、それinterns結果の文字列と述べていませんが、どちらか、それはないを行うことを述べるものではありません。一般的に、メソッドがと言っていない場合、それは文字列をインターンンします、私はそれがないと仮定して快適に感じるでしょう。

OracleのJDKの現在の実装ではない、それは次のようになります。

public static String valueOf(char data[]) { 
    return new String(data); 
} 

あなたは、もちろん、直接new String(char[])を使用して、任意のあいまいさを避けることができます。 char[]内容がをコピーされ、あなたは、あなたが彼らと終わったときに、パスワードの文字をクリアするためにコピーを上書きすることはできませんので、理想的には、すべてのでStringを使用していない、と述べた

(反射に頼ることなく)。代わりにとすぐにあなたのUIレイヤーからchar[]を取得したら、パスワードハッシングアルゴリズムを実行してすぐにchar[]の内容を上書きし、ハッシュされたパスワードを保存されたコピー(たとえば、DBなど)に対して検証します。 )。誰かがそれを指摘するために起こっているという理由だけで


パスワードをプリントアウトは、おそらくパスワードが抑留されているかどうかよりも大きなセキュリティ上の懸念事項です。しかし、これはテストコードのように見えます:...-)

関連する問題