java - なぜchar[]はStringよりもパスワードに適しているのですか?

java / string / security / passwords / char

Swingでは、パスワードフィールドに通常の getText()String 返す)メソッドの代わりに getPassword()char[] 返す)メソッドがあります。同様に、パスワードの処理に String を使用しないという提案に出くわしました。

Rakete1111



Answer #1

元の回答: String.equals()が短絡評価を使用しているため、タイミング攻撃に対して脆弱であるという事実はどうですか?可能性は低いかもしれませんが、理論的には、正しい文字シーケンスを決定するためにパスワード比較の時間を計ることができます。

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        //文字列の長さが異なる場合は、ここで終了します。
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            //最初は別の文字でここで終了します。
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}