作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码位于按钮的 OnClickListner 下
String username = edtLabel.getText().toString():
char[] password = new char[edtPassword.getText().length()];
edtPassword.getText().getChars(0, edtPassword.getText().length(), password,0);
new BackGroundTask(username, password).execute();
Arrays.fill(password, '0');
我在这里面临的问题是传递给 BackGroundTask 构造函数(AsyncTask 类)的密码始终是一个零数组,即 {0, 0, 0}。虽然我在设置构造函数后调用了 Arrays.fill() 函数。
该代码比给定的代码段稍长,用于验证其他一些内容,但不会随时更改密码。
我到处找了很长一段时间,但什么也没找到。我看到的唯一解决方案是使用一个处理程序,该处理程序在几百毫秒后执行,用零填充密码。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Arrays.fill(password, '0');
}
}, 100);
任何更好、更直接的技术都会很棒,谢谢。
最佳答案
如果BackGroundTask
构造函数不应更改原始 password
数组,您可以使用 Arrays.copyOf()
传递该数组的副本.
char[] pwCopy = Arrays.copyOf(password,password.length);
new BackGroundTask(username, pwCopy).execute();
Arrays.fill(password, '0');
编辑:如果目标是在使用完密码后从内存中删除密码,我会移动 Arrays.fill(password, '0');
调用 BackGroundTask
的方法(或构造函数)的末尾使用 password
的类大批。在这种情况下,您不必创建数组的副本。
关于Java Arrays.fill() 函数在主线程上过早执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50466008/
我是一名优秀的程序员,十分优秀!