Replaced internal Base64 by java.util.Base64 (#3803) (#3829)

* Replaced core-common.src.main.java.org.glassfish.jersey.internal.util.Base64 with java.util.Base64
* fixed conversion to String after decoding of Base64 encode message
Signed-off-by: Michael Durawa <michael.durawa@boehringer-ingelheim.com>
diff --git a/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyBasicAuthenticator.java b/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyBasicAuthenticator.java
index f7d7777..bab2807 100644
--- a/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyBasicAuthenticator.java
+++ b/connectors/jdk-connector/src/main/java/org/glassfish/jersey/jdk/connector/internal/ProxyBasicAuthenticator.java
@@ -17,8 +17,8 @@
 package org.glassfish.jersey.jdk.connector.internal;
 
 import java.nio.charset.Charset;
+import java.util.Base64;
 
-import org.glassfish.jersey.internal.util.Base64;
 
 /**
  * @author Ondrej Kosatka (ondrej.kosatka at oracle.com)
@@ -46,6 +46,6 @@
         System.arraycopy(prefix, 0, usernamePassword, 0, prefix.length);
         System.arraycopy(passwordBytes, 0, usernamePassword, prefix.length, passwordBytes.length);
 
-        return "Basic " + Base64.encodeAsString(usernamePassword);
+        return "Basic " + Base64.getEncoder().encodeToString(usernamePassword);
     }
 }
diff --git a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java
index d1a0a72..15a2cdf 100644
--- a/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java
+++ b/connectors/jdk-connector/src/test/java/org/glassfish/jersey/jdk/connector/internal/ProxyTest.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.charset.Charset;
+import java.util.Base64;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -31,7 +32,6 @@
 
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
-import org.glassfish.jersey.internal.util.Base64;
 import org.glassfish.jersey.jdk.connector.JdkConnectorProperties;
 import org.glassfish.jersey.jdk.connector.JdkConnectorProvider;
 import org.glassfish.jersey.server.ResourceConfig;
@@ -227,7 +227,7 @@
                 response.setStatus(400);
                 return false;
             }
-            String decoded = new String(Base64.decode(authorizationHeader.substring(6).getBytes()),
+            String decoded = new String(Base64.getDecoder().decode(authorizationHeader.substring(6).getBytes()),
                     CHARACTER_SET);
             final String[] split = decoded.split(":");
             final String username = split[0];
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java b/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java
index f526307..b08b074 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/authentication/BasicAuthenticator.java
@@ -16,12 +16,13 @@
 
 package org.glassfish.jersey.client.authentication;
 
+import java.util.Base64;
+
 import javax.ws.rs.client.ClientRequestContext;
 import javax.ws.rs.client.ClientResponseContext;
 import javax.ws.rs.core.HttpHeaders;
 
 import org.glassfish.jersey.client.internal.LocalizationMessages;
-import org.glassfish.jersey.internal.util.Base64;
 
 /**
  * Implementation of Basic Http Authentication method (RFC 2617).
@@ -61,7 +62,7 @@
         System.arraycopy(prefix, 0, usernamePassword, 0, prefix.length);
         System.arraycopy(password, 0, usernamePassword, prefix.length, password.length);
 
-        return "Basic " + Base64.encodeAsString(usernamePassword);
+        return "Basic " + Base64.getEncoder().encodeToString(usernamePassword);
     }
 
     /**
diff --git a/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java b/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java
index 43f2511..e967db0 100644
--- a/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java
+++ b/core-client/src/test/java/org/glassfish/jersey/client/filter/HttpBasicAuthFilterTest.java
@@ -17,6 +17,7 @@
 package org.glassfish.jersey.client.filter;
 
 
+import java.util.Base64;
 import java.util.concurrent.Future;
 
 import javax.ws.rs.client.Client;
@@ -34,7 +35,7 @@
 import org.glassfish.jersey.client.spi.AsyncConnectorCallback;
 import org.glassfish.jersey.client.spi.Connector;
 import org.glassfish.jersey.client.spi.ConnectorProvider;
-import org.glassfish.jersey.internal.util.Base64;
+
 
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
@@ -53,7 +54,8 @@
         Invocation.Builder invBuilder = client.target(UriBuilder.fromUri("/").build()).request();
         Response r = invBuilder.get();
 
-        assertEquals("Basic " + Base64.encodeAsString("Uzivatelske jmeno:Heslo"), r.getHeaderString(HttpHeaders.AUTHORIZATION));
+        assertEquals("Basic " + Base64.getEncoder().encodeToString("Uzivatelske jmeno:Heslo".getBytes()),
+                     r.getHeaderString(HttpHeaders.AUTHORIZATION));
     }
 
     @Test
@@ -63,7 +65,7 @@
         Invocation.Builder invBuilder = client.target(UriBuilder.fromUri("/").build()).request();
         Response r = invBuilder.get();
 
-        assertEquals("Basic " + Base64.encodeAsString(":"), r.getHeaderString(HttpHeaders.AUTHORIZATION));
+        assertEquals("Basic " + Base64.getEncoder().encodeToString(":".getBytes()), r.getHeaderString(HttpHeaders.AUTHORIZATION));
     }
 
     private static class TestConnector implements Connector, ConnectorProvider {
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/util/Base64.java b/core-common/src/main/java/org/glassfish/jersey/internal/util/Base64.java
deleted file mode 100644
index f3c6f57..0000000
--- a/core-common/src/main/java/org/glassfish/jersey/internal/util/Base64.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package org.glassfish.jersey.internal.util;
-
-import java.io.UnsupportedEncodingException;
-
-/**
- * Utility class that implements base64 encoding and decoding.
- *
- * @author Martin Matula
- */
-public class Base64 {
-
-    private static final byte[] CHAR_SET;
-
-    static {
-        final String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-        byte[] cs;
-
-        try {
-            cs = s.getBytes("ASCII");
-        } catch (final UnsupportedEncodingException ex) {
-            // should never happen
-            cs = s.getBytes();
-        }
-        CHAR_SET = cs;
-    }
-
-    private static final byte[] BASE64INDEXES = {
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
-            52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64,
-            64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-            15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
-            64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-            41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
-            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
-    };
-
-    /**
-     * Encodes array of bytes using base64 encoding.
-     *
-     * @param buffer Array of bytes to be encoded.
-     * @return Encoded result as an array of bytes.
-     */
-    public static byte[] encode(final byte[] buffer) {
-        final int ccount = buffer.length / 3;
-        final int rest = buffer.length % 3;
-        final byte[] result = new byte[(ccount + (rest > 0 ? 1 : 0)) * 4];
-
-        for (int i = 0; i < ccount; i++) {
-            result[i * 4] = CHAR_SET[(buffer[i * 3] >> 2) & 0xff];
-            result[i * 4 + 1] = CHAR_SET[(((buffer[i * 3] & 0x03) << 4) | (buffer[i * 3 + 1] >> 4)) & 0xff];
-            result[i * 4 + 2] = CHAR_SET[(((buffer[i * 3 + 1] & 0x0f) << 2) | (buffer[i * 3 + 2] >> 6)) & 0xff];
-            result[i * 4 + 3] = CHAR_SET[buffer[i * 3 + 2] & 0x3f];
-        }
-
-        int temp = 0;
-
-        if (rest > 0) {
-            if (rest == 2) {
-                result[ccount * 4 + 2] = CHAR_SET[((buffer[ccount * 3 + 1] & 0x0f) << 2) & 0xff];
-                temp = buffer[ccount * 3 + 1] >> 4;
-            } else {
-                result[ccount * 4 + 2] = CHAR_SET[CHAR_SET.length - 1];
-            }
-            result[ccount * 4 + 3] = CHAR_SET[CHAR_SET.length - 1];
-            result[ccount * 4 + 1] = CHAR_SET[(((buffer[ccount * 3] & 0x03) << 4) | temp) & 0xff];
-            result[ccount * 4] = CHAR_SET[(buffer[ccount * 3] >> 2) & 0xff];
-        }
-
-        return result;
-    }
-
-    /**
-     * Decodes Base64 data into octects.
-     *
-     * @param buffer Byte array containing Base64 data
-     * @return Array containing decoded data.
-     */
-    @SuppressWarnings("fallthrough")
-    public static byte[] decode(final byte[] buffer) {
-        if (buffer.length < 4 && (buffer.length % 4) != 0) {
-            return new byte[0];
-        }
-
-        final int ccount = buffer.length / 4;
-        final int paddingCount = (buffer[buffer.length - 1] == '=' ? 1 : 0) + (buffer[buffer.length - 2] == '=' ? 1 : 0);
-        final byte[] result = new byte[3 * (ccount - 1) + (3 - paddingCount)];
-
-        for (int i = 0; i < (ccount - 1); i++) {
-            result[i * 3] = (byte) ((BASE64INDEXES[buffer[i * 4]] << 2) | (BASE64INDEXES[buffer[i * 4 + 1]] >> 4));
-            result[i * 3 + 1] = (byte) ((BASE64INDEXES[buffer[i * 4 + 1]] << 4) | (BASE64INDEXES[buffer[i * 4 + 2]] >> 2));
-            result[i * 3 + 2] = (byte) ((BASE64INDEXES[buffer[i * 4 + 2]] << 6) | BASE64INDEXES[buffer[i * 4 + 3]]);
-        }
-
-        final int i = ccount - 1;
-        switch (paddingCount) {
-            case 0:
-                result[i * 3 + 2] = (byte) ((BASE64INDEXES[buffer[i * 4 + 2]] << 6) | BASE64INDEXES[buffer[i * 4 + 3]]);
-                result[i * 3 + 1] = (byte) ((BASE64INDEXES[buffer[i * 4 + 1]] << 4) | (BASE64INDEXES[buffer[i * 4 + 2]] >> 2));
-                result[i * 3] = (byte) ((BASE64INDEXES[buffer[i * 4]] << 2) | (BASE64INDEXES[buffer[i * 4 + 1]] >> 4));
-                break;
-            case 1:
-                result[i * 3 + 1] = (byte) ((BASE64INDEXES[buffer[i * 4 + 1]] << 4) | (BASE64INDEXES[buffer[i * 4 + 2]] >> 2));
-                result[i * 3] = (byte) ((BASE64INDEXES[buffer[i * 4]] << 2) | (BASE64INDEXES[buffer[i * 4 + 1]] >> 4));
-                break;
-            case 2:
-                result[i * 3] = (byte) ((BASE64INDEXES[buffer[i * 4]] << 2) | (BASE64INDEXES[buffer[i * 4 + 1]] >> 4));
-                break;
-        }
-
-        return result;
-    }
-
-    /**
-     * Encodes array of bytes using base64 encoding and returns the result as a string.
-     *
-     * @param buffer Array of bytes to be encoded.
-     * @return Resulting encoded string.
-     */
-    public static String encodeAsString(final byte[] buffer) {
-        final byte[] result = encode(buffer);
-        try {
-            return new String(result, "ASCII");
-        } catch (final UnsupportedEncodingException ex) {
-            // should never happen
-            return new String(result);
-        }
-    }
-
-    /**
-     * Encodes a string using base64 and returns the result as another string.
-     *
-     * @param text String to be encoded.
-     * @return Resulting encoded string.
-     */
-    public static String encodeAsString(final String text) {
-        return encodeAsString(text.getBytes());
-    }
-
-    /**
-     * Decodes array of bytes using base64 decoding and returns the result as a string.
-     *
-     * @param buffer Array of bytes to be decoded.
-     * @return Resulting decoded string.
-     */
-    public static String decodeAsString(final byte[] buffer) {
-        final byte[] result = decode(buffer);
-        try {
-            return new String(result, "ASCII");
-        } catch (final UnsupportedEncodingException ex) {
-            // should never happen
-            return new String(result);
-        }
-    }
-
-    /**
-     * Decodes a string using base64 and returns the result as another string.
-     *
-     * @param text String to be decoded.
-     * @return Resulting decoded string.
-     */
-    public static String decodeAsString(final String text) {
-        return decodeAsString(text.getBytes());
-    }
-}
diff --git a/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java b/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java
index 89dfa98..b083ad9 100644
--- a/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java
+++ b/core-common/src/test/java/org/glassfish/jersey/internal/util/Base64Test.java
@@ -17,6 +17,7 @@
 package org.glassfish.jersey.internal.util;
 
 import java.util.Arrays;
+import java.util.Base64;
 
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
@@ -48,35 +49,35 @@
     @Test
     public void testEncodeString() throws Exception {
         for (int i = 0; i < decoded.length; i++) {
-            assertEquals(encoded[i], new String(Base64.encode(decoded[i].getBytes("ASCII")), "ASCII"));
+            assertEquals(encoded[i], new String(Base64.getEncoder().encode(decoded[i].getBytes("ASCII")), "ASCII"));
         }
     }
 
     @Test
     public void testDecodeString() throws Exception {
         for (int i = 0; i < encoded.length; i++) {
-            assertEquals(decoded[i], new String(Base64.decode(encoded[i].getBytes("ASCII")), "ASCII"));
+            assertEquals(decoded[i], new String(Base64.getDecoder().decode(encoded[i].getBytes("ASCII")), "ASCII"));
         }
     }
 
     @Test
     public void testRoundtripLengthMod3Equals0() {
         byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8};
-        byte[] result = Base64.decode(Base64.encode(data));
+        byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
         assertTrue("failed to roundtrip value to base64", Arrays.equals(data, result));
     }
 
     @Test
     public void testRoundtripLengthMod3Equals1() {
         byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-        byte[] result = Base64.decode(Base64.encode(data));
+        byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
         assertTrue("failed to roundtrip value to base64", Arrays.equals(data, result));
     }
 
     @Test
     public void testRoundtripLengthMod3Equals2() {
         byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
-        byte[] result = Base64.decode(Base64.encode(data));
+        byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
         assertTrue("failed to roundtrip value to base64", Arrays.equals(data, result));
     }
 
@@ -84,10 +85,10 @@
     public void testRoundtripOneByteGreaterThan127() {
         byte[] data = {(byte) 128};
         try {
-            byte[] result = Base64.decode(Base64.encode(data));
-            fail();
-        } catch (Exception e) {
+            byte[] result = Base64.getDecoder().decode(Base64.getEncoder().encode(data));
             // ok
+        } catch (Exception e) {
+            fail();
         }
     }
 
@@ -95,10 +96,10 @@
     public void testRoundtripAssortedValues() {
         byte[] data = {0, 1, 63, 64, 65, (byte) 127, (byte) 128, (byte) 1299, (byte) 254, (byte) 255};
         try {
-            Base64.decode(Base64.encode(data));
-            fail();
-        } catch (Exception e) {
+            Base64.getDecoder().decode(Base64.getEncoder().encode(data));
             // ok
+        } catch (Exception e) {
+            fail();
         }
     }
 
@@ -109,10 +110,10 @@
             data[i] = (byte) (255 - i);
         }
         try {
-            new String(Base64.encode(data));
-            fail();
-        } catch (Exception e) {
+            new String(Base64.getEncoder().encode(data));
             // ok
+        } catch (Exception e) {
+            fail();
         }
     }
 
@@ -122,7 +123,7 @@
                 + "+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn"
                 + "+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6"
                 + "/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==";
-        byte[] result = Base64.decode(data.getBytes());
+        byte[] result = Base64.getDecoder().decode(data.getBytes());
 
         assertEquals("incorrect length", result.length, 256);
         for (int i = 0; i < 256; ++i) {
diff --git a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java
index 9187fa1..f72b023 100644
--- a/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java
+++ b/security/oauth1-signature/src/test/java/org/glassfish/jersey/oauth1/signature/OAuthBase64Test.java
@@ -31,17 +31,17 @@
     public void test() throws IOException {
         final String str = "Hello World123456789jhfsljkh347uweihd7834yfoiuhef5re4g54es35gf474w5/";
         final String encoded = Base64.encode(str.getBytes());
-        final String encodedUtil = new String(org.glassfish.jersey.internal.util.Base64.encode(str.getBytes()));
-        final String encodedUtilStr = org.glassfish.jersey.internal.util.Base64.encodeAsString(str);
+        final String encodedUtil = new String(java.util.Base64.getEncoder().encode(str.getBytes()));
+        final String encodedUtilStr = java.util.Base64.getEncoder().encodeToString(str.getBytes());
 
         System.out.println(encoded);
         Assert.assertEquals(encoded, encodedUtil);
         Assert.assertEquals(encoded, encodedUtilStr);
 
         final String decoded = new String(Base64.decode(encoded));
-        final String decodedUtil = new String(org.glassfish.jersey.internal.util.Base64.decode(encoded.getBytes()));
-        final String decodedUtilStr = org.glassfish.jersey.internal.util.Base64.decodeAsString(encoded.getBytes());
-        final String decodedUtilStr2 = org.glassfish.jersey.internal.util.Base64.decodeAsString(encoded);
+        final String decodedUtil = new String(java.util.Base64.getDecoder().decode(encoded.getBytes()));
+        final String decodedUtilStr = new String(java.util.Base64.getDecoder().decode(encoded.getBytes()));
+        final String decodedUtilStr2 = new String(java.util.Base64.getDecoder().decode(encoded));
 
         Assert.assertEquals(decoded, decodedUtil);
         Assert.assertEquals(decoded, decodedUtilStr);
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java
index 24d8114..5741988 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/HttpAuthorizationTest.java
@@ -23,6 +23,7 @@
 import java.lang.annotation.Target;
 import java.nio.charset.Charset;
 import java.security.Principal;
+import java.util.Base64;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -39,7 +40,6 @@
 import javax.ws.rs.core.SecurityContext;
 
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
-import org.glassfish.jersey.internal.util.Base64;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
@@ -157,7 +157,7 @@
 
             String authHeader = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
             if (authHeader != null && authHeader.trim().toUpperCase().startsWith("BASIC")) {
-                String decoded = new String(Base64.decode(authHeader.substring(6).getBytes()), CHARACTER_SET);
+                String decoded = new String(Base64.getDecoder().decode(authHeader.substring(6).getBytes()), CHARACTER_SET);
                 //                String decoded = Base64.decodeAsString(authHeader.substring(6));
                 final String[] split = decoded.split(":");
                 final String username = split[0];
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/RootResource.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/RootResource.java
index bccbf94..23205f2 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/RootResource.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/RootResource.java
@@ -16,6 +16,7 @@
 
 package org.glassfish.jersey.tests.e2e.client.connector.ssl;
 
+import java.util.Base64;
 import java.util.logging.Logger;
 
 import javax.ws.rs.GET;
@@ -23,7 +24,6 @@
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
 
-import org.glassfish.jersey.internal.util.Base64;
 
 /**
  * Simple resource demonstrating low level approach of getting user credentials.
@@ -60,7 +60,7 @@
         String auth = headers.getRequestHeader("authorization").get(0);
 
         auth = auth.substring("Basic ".length());
-        String[] values = Base64.decodeAsString(auth).split(":");
+        String[] values = new String(Base64.getDecoder().decode(auth)).split(":");
 
         // String username = values[0];
         // String password = values[1];
diff --git a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SecurityFilter.java b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SecurityFilter.java
index 128d4cf..986b64c 100644
--- a/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SecurityFilter.java
+++ b/tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/ssl/SecurityFilter.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.security.Principal;
+import java.util.Base64;
 import java.util.logging.Logger;
 
 import javax.ws.rs.WebApplicationException;
@@ -31,7 +32,6 @@
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.Provider;
 
-import org.glassfish.jersey.internal.util.Base64;
 import org.glassfish.jersey.server.ContainerRequest;
 
 /**
@@ -73,7 +73,7 @@
             // "Only HTTP Basic authentication is supported"
         }
         authentication = authentication.substring("Basic ".length());
-        String[] values = Base64.decodeAsString(authentication).split(":");
+        String[] values = new String(Base64.getDecoder().decode(authentication)).split(":");
         if (values.length < 2) {
             throw new WebApplicationException(400);
             // "Invalid syntax for username and password"