jdk/src/java.base/share/classes/com/sun/crypto/provider/DESedeKey.java
changeset 46097 22316369c9b0
parent 44534 a076dffbc2c1
--- 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();
-        }
-    }
 }