作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个函数,使用 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/
我正在编写一个函数,使用 SecretKeyFactory 根据密码生成 key (字节)。我想在不再需要时销毁 SecretKey 实例,但它会引发异常。 try { byte[] salt
我是一名优秀的程序员,十分优秀!