在JavaFX中从PasswordField获取密码的安全方法

Krz*_*iek 21 java javafx

有没有办法从JavaFX8中的PasswordField安全地检索密码,所以它没有保存在内存中?

标准选项:

String pass = passwordField.getText();
Run Code Online (Sandbox Code Playgroud)

对我来说还不够.我期待这样的事情:

char[] pass = passwordField.getPassword();
Run Code Online (Sandbox Code Playgroud)

3ph*_*h3r 1

与许多事情一样,您可以使用反射来实现这一点。由于您使用的是反射,所以它不会很漂亮(只需看看所有这些例外),但我认为这是目前唯一的方法。

public class SafePasswordField extends PasswordField {

    public final char[] getPassword() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Content c = getContent();

        Field fld = c.getClass().getDeclaredField("characters");
        fld.setAccessible(true);

        StringBuilder sb = (StringBuilder) fld.get(c);
        char[] result = new char[sb.length()];
        sb.getChars(0, sb.length(), result, 0);

        return result;
    }

}
Run Code Online (Sandbox Code Playgroud)

返回ContentgetContent()始终是 的实例,因此访问字段javafx.scene.control.TextField$TextFieldContent安全的characters