在java中,如何清除每个方法中的字节[]数组以保护值不被内存转储?
在爪哇
如果我在下面的代码中运行,pwd值存在于内存中,因为字节数组值被复制到digest方法,digest方法也会将该值复制到其他一些方法
import java.security.MessageDigest
byte[] pwd = "some_pwd".getBytes();
MessageDigest md = MessageDigest.getInstance("SHA");
for (int i = 0; i < 100; i++) {
byte[] hash = md.digest(pwd);
}
内存转储软件显示客户不喜欢的密码值
我检查了字节[]是否按值从一个方法复制到另一个方法
是否仍有保护重要字节数组值的方法
# 1 楼答案
密码文本最好不要作为字符串传递,但我们假设这是一个示例:
然后确保字节不会出现在测试的字符串中
然后是解决方案:
现在,MessageDigest无法在调用digest时维护数组的副本
如果您甚至不想使用pwd数组,那么只需要从password字段一次获取一个char/byte