相关疑难解决方法(0)

为什么char []比字符串更适合密码?

在Swing中,密码字段具有getPassword()(返回char[])方法而不是通常getText()(返回String)方法.同样,我遇到了一个不使用String来处理密码的建议.

为什么String在密码方面会对安全构成威胁?使用感觉不方便char[].

java security string passwords char

3298
推荐指数
16
解决办法
38万
查看次数

为什么JPasswordField.getPassword()会创建一个包含密码的String?

Swing的JPasswordFieldgetPassword()一个返回字符数组的方法.我对此的理解是,数组可以在使用后立即归零,这样你就不会在内存中长时间存在敏感的东西.检索密码的旧方法是使用getText(),它返回一个String对象,但它已被弃用.

所以,我的问题是为什么Java在检索过程中实际使用它getPassword()?为了更清楚,我正在调试我的测试应用程序的其他东西**,我跟着调用和爆炸... getText()JPasswordField被调用,当然,一个很好的String对象与我的密码已经创建,现在挂在内存.

亲自尝试一下:

public class PasswordTest() {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPasswordField passField = new JPasswordField();
        pass.addActionListener(new ActionListener() {
            public ActionPerformed(ActionEvent evt) {
                char[] p = passField.getPassword(); // put breakpoint
                // do something with the array
            }
        });
        frame.add(passField);
        frame.setVisible(true);
        frame.pack();
    }
}
Run Code Online (Sandbox Code Playgroud)

跟进问题:这种"隐藏"的getText()危险用途是什么?当然,如果一个专门的攻击者破坏了系统,它会获得你的密码,我说的是一个不那么专注的密码;)

**我在寻找一种在不使用String对象的情况下在Swing组件上实际显示一些敏感数据的方法时遇到了这个问题.显然除非我愿意重写Swing API的部分(全部?),否则无法做到这一点.不会发生.

java security passwords swing

27
推荐指数
3
解决办法
9万
查看次数

标签 统计

java ×2

passwords ×2

security ×2

char ×1

string ×1

swing ×1