gpt4 book ai didi

java - 如何确保 Java 对象(包含加密 Material )被归零?

转载 作者:搜寻专家 更新时间:2023-10-31 19:58:53 25 4
gpt4 key购买 nike

我担心的是,由垃圾收集器管理的加密 key 和 secret 可能会在内存中被复制和移动而无需归零。

作为一个可能的解决方案,是否足以:

public class Key {
private char[] key;
// ...
protected void finalize() throws Throwable {
try {
for(int k = 0; k < key.length; k++) {
key[k] = '\0';
}
} catch (Exception e) {
//...
} finally {
super.finalize();
}
}
// ...
}

编辑:请注意,我的问题不仅涉及对象的官方(引用)副本的归零,还涉及垃圾收集器在为空间和速度效率而调整内存时可能制作的任何陈旧副本。

最简单的示例是标记清除 GC,其中对象被标记为“已引用”,然后所有这些对象都被复制到另一个区域。其余的都是垃圾,因此被收集起来。当复制发生时,可能会留下垃圾收集器不再管理的残余 key 数据(因为“官方”数据位于新区域中)。

对此的试金石是,如果您在加密模块中使用 key ,将 key 归零,然后检查整个 JVM 进程空间,您应该找不到该 key 。

最佳答案

Java Cryptography Extension Reference Guide建议始终使用字符数组而不是字符串作为密码,以便之后可以将它们归零。他们还提供了 how you could implement it 的代码示例.

关于java - 如何确保 Java 对象(包含加密 Material )被归零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2502938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com