gpt4 book ai didi

java - 销毁 SecretKey 会抛出 DestroyFailedException?

转载 作者:行者123 更新时间:2023-11-30 08:00:46 25 4
gpt4 key购买 nike

我正在编写一个函数,使用 SecretKeyFactory 根据密码生成 key (字节)。我想在不再需要时销毁 SecretKey 实例,但它会引发异常。

try {
byte[] salt = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

PBEKeySpec keySpec = new PBEKeySpec("password".toCharArray(), salt, 1000, 256);

SecretKey secretkey = factory.generateSecret(keySpec);
byte[] key = secretkey.getEncoded();

// Using key

// Destroy key
Arrays.fill(key, (byte)0);

// Destroy secretKey
secretkey.destroy(); // --> Throw DestroyFailedException

} catch (Exception e) {
e.printStackTrace();
}

我在 Mac 上使用 Oracle JDK1.8.0_66。

我查看了 SecretKey 源代码,发现了这个默认实现(SecretKey 实现了 Destroyable 接口(interface))

public default void destroy() throws DestroyFailedException {
throw new DestroyFailedException();
}

这意味着:SecretKey 的实现不会重写 destroy 方法来销毁内部密码字符和内部 key 字节。

这是 JDK 8 中的错误吗?

最佳答案

你是对的。 PBKDF2KeyImpl类没有实现继承自 Destroyable 的 destroy 方法。 It also looks like you are not the first person to be concerned by this .

这不一定是 JDK 中的错误,因为 SecretKey 的 API明确将其留给实现类来定义此行为,尽管未覆盖此行为似乎有点奇怪。

关于java - 销毁 SecretKey 会抛出 DestroyFailedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38276866/

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