--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/DESedeKey.java Mon Aug 07 09:37:16 2017 +0100
+++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/DESedeKey.java Mon Aug 07 14:14:03 2017 -0400
@@ -31,6 +31,8 @@
import javax.crypto.SecretKey;
import javax.crypto.spec.DESedeKeySpec;
+import jdk.internal.ref.CleanerFactory;
+
/**
* This class represents a DES-EDE key.
*
@@ -76,6 +78,11 @@
DESKeyGenerator.setParityBit(this.key, 0);
DESKeyGenerator.setParityBit(this.key, 8);
DESKeyGenerator.setParityBit(this.key, 16);
+
+ // Use the cleaner to zero the key when no longer referenced
+ final byte[] k = this.key;
+ CleanerFactory.cleaner().register(this,
+ () -> java.util.Arrays.fill(k, (byte)0x00));
}
public byte[] getEncoded() {
@@ -145,20 +152,4 @@
getFormat(),
getEncoded());
}
-
- /**
- * Ensures that the bytes of this key are
- * set to zero when there are no more references to it.
- */
- @SuppressWarnings("deprecation")
- protected void finalize() throws Throwable {
- try {
- if (this.key != null) {
- java.util.Arrays.fill(this.key, (byte)0x00);
- this.key = null;
- }
- } finally {
- super.finalize();
- }
- }
}