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

标准选项:

String pass = passwordField.getText();

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

char[] pass = passwordField.getPassword();

#1楼 票数:2

无论变量类型是什么(String,char [] ...), 它总是存储在内存中 ,直到垃圾收集器选择它。 虽然我认为这有点困难,但你必须制作一个程序并读取包含变量数据的内存空间才能检索密码。 如果我是你,我不会担心任何窃听:)

#2楼 票数: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;
    }

}

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

  ask by Krzysiek translate from so

未解决问题?本站智能推荐:

1回复

如何从JavaFX中的服务处理程序方法获取Task实例

我有一个JavaFX服务,在其中创建Task可以完成一些工作: 我也有一个成功的处理程序: 由于可以同时运行该服务一次以上,因此我将无法与成功处理程序区分开Task的哪个实例完成了。 调查该文档,我找不到任何方法。 我的想法是将Task扩展为包含一些ID(例如整数),然后
3回复

在JavaFX中,observableArrayList线程是否安全?

我通过修改可观察数组列表来更新表,但现在2个线程可能会修改可观察数组列表。 我应该在同步方法中放置修改列表的代码,还是只允许1个线程修改列表?
2回复

JavaFX中的SetAlignment方法

1)当我运行它时,所有的对象都放置在TOP_CENTER中,正如您在代码中看到的那样,我试图将按钮放置在BOTTOM_RIGHT中,但它没有起作用。 2)一个Scene可以包括两个布局吗? (例如,两个VBox -es)。
1回复

在 JavaFX 中获取行号

我想知道是否有任何方法可以获取 JavaFX TableView 的行号。 例如,我有一个表格,可以在 10 行 3 列的文本文件中获取数据,我想要一个监听器,它应该能够获取整行并且只获取其行号。 在行中 我尝试将TablePosition更改为 TableRow 但后来我无法使用 add
1回复

从javaFX中的TabPane获取TextArea

我一直在使用TabPane在每个选项卡中包含TextArea。 像这样: 现在,我必须找到所选选项卡中直接包含的文本区域。 我怎么才能得到它?
1回复

在 JavaFX 应用程序的 Main 方法中获取 .fxml 文件中定义的 TextArea [重复]

这个问题在这里已经有了答案: 传递参数 JavaFX FXML (10 个回答) 去年关闭。 我想问你,我是否可以从
2回复

在JavaFX中,有没有一种方法可以仅通过组件的位置来获取对组件的引用?

我目前正在尝试JavaFX用户界面并对其进行自动测试。 对于我目前在GUI中使用图形组件识别的实验,我获得了组件的位置,并且至少可以在组件上执行鼠标交互。 但是,我还想执行诸如读取和比较文本字段中的文本之类的操作,或者读取或更改JavaFX GUI组件的任何其他属性。 因此,我想知
2回复

在JavaFX控制器中获取被单击对象的id的更好方法

我正在寻找一种更好的方法来获取此对象的事件处理程序中被点击对象的id。 我已经发现了这个: javafx将fx:id传递给fxml onAction方法中的控制器或参数 但这对我不起作用。 现在我正在使用节点类的getId()函数,如下所示: 但我想这个方法不仅仅