diff --git a/Lib/base64.py b/Lib/base64.py
index c1135a8..73e9808 100755
--- a/Lib/base64.py
+++ b/Lib/base64.py
@@ -391,9 +391,9 @@
 def test():
     s0 = b"Aladdin:open sesame"
     print(repr(s0))
-    s1 = encodestring(s0)
+    s1 = encodebytes(s0)
     print(repr(s1))
-    s2 = decodestring(s1)
+    s2 = decodebytes(s1)
     print(repr(s2))
     assert s0 == s2
 
diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py
index 9249427..3b4a036 100644
--- a/Lib/distutils/command/upload.py
+++ b/Lib/distutils/command/upload.py
@@ -127,7 +127,7 @@
         user_pass = (self.username + ":" + self.password).encode('ascii')
         # The exact encoding of the authentication string is debated.
         # Anyway PyPI only accepts ascii for both username or password.
-        auth = "Basic " + base64.encodestring(user_pass).strip().decode('ascii')
+        auth = "Basic " + base64.encodebytes(user_pass).strip().decode('ascii')
 
         # Build up the MIME payload for the POST data
         boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index 4b5065f..86e3537 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -944,7 +944,7 @@
 
     def test_encoding(self):
         payload = self._au.get_payload()
-        self.assertEqual(base64.decodestring(payload), self._audiodata)
+        self.assertEqual(base64.decodebytes(payload), self._audiodata)
 
     def test_checkSetMinor(self):
         au = MIMEAudio(self._audiodata, 'fish')
@@ -984,7 +984,7 @@
 
     def test_encoding(self):
         payload = self._im.get_payload()
-        self.assertEqual(base64.decodestring(payload), self._imgdata)
+        self.assertEqual(base64.decodebytes(payload), self._imgdata)
 
     def test_checkSetMinor(self):
         im = MIMEImage(self._imgdata, 'fish')
diff --git a/Lib/http/server.py b/Lib/http/server.py
index 193964f..2163e74 100644
--- a/Lib/http/server.py
+++ b/Lib/http/server.py
@@ -985,7 +985,7 @@
                 if authorization[0].lower() == "basic":
                     try:
                         authorization = authorization[1].encode('ascii')
-                        authorization = base64.decodestring(authorization).\
+                        authorization = base64.decodebytes(authorization).\
                                         decode('ascii')
                     except (binascii.Error, UnicodeError):
                         pass
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
index 2084b5f..5460e2b 100644
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -316,7 +316,7 @@
 
 
 def _encodeBase64(s, maxlinelength=76):
-    # copied from base64.encodestring(), with added maxlinelength argument
+    # copied from base64.encodebytes(), with added maxlinelength argument
     maxbinsize = (maxlinelength//4)*3
     pieces = []
     for i in range(0, len(s), maxbinsize):
@@ -335,7 +335,7 @@
 
     @classmethod
     def fromBase64(cls, data):
-        # base64.decodestring just calls binascii.a2b_base64;
+        # base64.decodebytes just calls binascii.a2b_base64;
         # it seems overkill to use both base64 and binascii.
         return cls(binascii.a2b_base64(data))
 
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index baed781..b88adfe 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -540,7 +540,7 @@
         """
 
         def encode_cram_md5(challenge, user, password):
-            challenge = base64.decodestring(challenge)
+            challenge = base64.decodebytes(challenge)
             response = user + " " + hmac.HMAC(password.encode('ascii'),
                                               challenge).hexdigest()
             return encode_base64(response.encode('ascii'), eol='')
diff --git a/Lib/ssl.py b/Lib/ssl.py
index d3c1d32..6a6a1a3 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -413,7 +413,7 @@
         raise ValueError("Invalid PEM encoding; must end with %s"
                          % PEM_FOOTER)
     d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
-    return base64.decodestring(d.encode('ASCII', 'strict'))
+    return base64.decodebytes(d.encode('ASCII', 'strict'))
 
 def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
     """Retrieve the certificate from the server at the specified address,
diff --git a/Lib/test/test_gettext.py b/Lib/test/test_gettext.py
index e26b30a..0023941 100644
--- a/Lib/test/test_gettext.py
+++ b/Lib/test/test_gettext.py
@@ -65,13 +65,13 @@
         if not os.path.isdir(LOCALEDIR):
             os.makedirs(LOCALEDIR)
         fp = open(MOFILE, 'wb')
-        fp.write(base64.decodestring(GNU_MO_DATA))
+        fp.write(base64.decodebytes(GNU_MO_DATA))
         fp.close()
         fp = open(UMOFILE, 'wb')
-        fp.write(base64.decodestring(UMO_DATA))
+        fp.write(base64.decodebytes(UMO_DATA))
         fp.close()
         fp = open(MMOFILE, 'wb')
-        fp.write(base64.decodestring(MMO_DATA))
+        fp.write(base64.decodebytes(MMO_DATA))
         fp.close()
         self.env = support.EnvironmentVarGuard()
         self.env['LANGUAGE'] = 'xx'
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index c8be440..39ec498 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -1050,7 +1050,7 @@
         self.assertFalse(http_handler.requests[0].has_header(auth_header))
         userpass = bytes('%s:%s' % (user, password), "ascii")
         auth_hdr_value = ('Basic ' +
-            base64.encodestring(userpass).strip().decode())
+            base64.encodebytes(userpass).strip().decode())
         self.assertEqual(http_handler.requests[1].get_header(auth_header),
                          auth_hdr_value)
 
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index 89ac22a..bb67267 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -1758,7 +1758,8 @@
         msg.append('Content-type: %s' % type)
         if encoding == 'base64':
             import base64
-            data = base64.decodestring(data)
+            # XXX is this encoding/decoding ok?
+            data = base64.decodebytes(data.encode('ascii')).decode('latin1')
         else:
             data = unquote(data)
         msg.append('Content-Length: %d' % len(data))
