diff --git a/Lib/test/test_tools.py b/Lib/test/test_tools.py
index 1bf7d54..957dc78 100644
--- a/Lib/test/test_tools.py
+++ b/Lib/test/test_tools.py
@@ -16,7 +16,7 @@
 import tempfile
 import textwrap
 from test import support
-from test.script_helper import assert_python_ok, temp_dir
+from test.script_helper import assert_python_ok, assert_python_failure
 
 if not sysconfig.is_python_build():
     # XXX some installers do contain the tools, should we detect that
@@ -61,7 +61,7 @@
 
     def test_selftest(self):
         self.maxDiff = None
-        with temp_dir() as directory:
+        with support.temp_dir() as directory:
             data_path = os.path.join(directory, '_test.py')
             with open(self.script) as f:
                 closed = f.read()
@@ -367,7 +367,7 @@
     # added for a script it should be added to the whitelist below.
 
     # scripts that have independent tests.
-    whitelist = ['reindent.py', 'pdeps.py', 'gprof2html']
+    whitelist = ['reindent.py', 'pdeps.py', 'gprof2html', 'md5sum.py']
     # scripts that can't be imported without running
     blacklist = ['make_ctype.py']
     # scripts that use windows-only modules
@@ -450,16 +450,74 @@
         self.assertTrue(wmock.open.called)
 
 
+class MD5SumTests(unittest.TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.script = os.path.join(scriptsdir, 'md5sum.py')
+        os.mkdir(support.TESTFN)
+        cls.fodder = os.path.join(support.TESTFN, 'md5sum.fodder')
+        with open(cls.fodder, 'wb') as f:
+            f.write(b'md5sum\r\ntest file\r\n')
+        cls.fodder_md5 = b'd38dae2eb1ab346a292ef6850f9e1a0d'
+        cls.fodder_textmode_md5 = b'a8b07894e2ca3f2a4c3094065fa6e0a5'
+
+    @classmethod
+    def tearDownClass(cls):
+        support.rmtree(support.TESTFN)
+
+    def test_noargs(self):
+        rc, out, err = assert_python_ok(self.script)
+        self.assertEqual(rc, 0)
+        self.assertTrue(
+            out.startswith(b'd41d8cd98f00b204e9800998ecf8427e <stdin>'))
+        self.assertFalse(err)
+
+    def test_checksum_fodder(self):
+        rc, out, err = assert_python_ok(self.script, self.fodder)
+        self.assertEqual(rc, 0)
+        self.assertTrue(out.startswith(self.fodder_md5))
+        for part in self.fodder.split(os.path.sep):
+            self.assertIn(part.encode(), out)
+        self.assertFalse(err)
+
+    def test_dash_l(self):
+        rc, out, err = assert_python_ok(self.script, '-l', self.fodder)
+        self.assertEqual(rc, 0)
+        self.assertIn(self.fodder_md5, out)
+        parts = self.fodder.split(os.path.sep)
+        self.assertIn(parts[-1].encode(), out)
+        self.assertNotIn(parts[-2].encode(), out)
+
+    def test_dash_t(self):
+        rc, out, err = assert_python_ok(self.script, '-t', self.fodder)
+        self.assertEqual(rc, 0)
+        self.assertTrue(out.startswith(self.fodder_textmode_md5))
+        self.assertNotIn(self.fodder_md5, out)
+
+    def test_dash_s(self):
+        rc, out, err = assert_python_ok(self.script, '-s', '512', self.fodder)
+        self.assertEqual(rc, 0)
+        self.assertIn(self.fodder_md5, out)
+
+    def test_multiple_files(self):
+        rc, out, err = assert_python_ok(self.script, self.fodder, self.fodder)
+        self.assertEqual(rc, 0)
+        lines = out.splitlines()
+        self.assertEqual(len(lines), 2)
+        self.assertEqual(*lines)
+
+    def test_usage(self):
+        rc, out, err = assert_python_failure(self.script, '-h')
+        self.assertEqual(rc, 2)
+        self.assertEqual(out, b'')
+        self.assertGreater(err, b'')
+
+
 # Run the tests in Tools/parser/test_unparse.py
 with support.DirsOnSysPath(os.path.join(basepath, 'parser')):
     from test_unparse import UnparseTestCase
     from test_unparse import DirectoryTestCase
 
-
-def test_main():
-    support.run_unittest(*[obj for obj in globals().values()
-                               if isinstance(obj, type)])
-
-
 if __name__ == '__main__':
     unittest.main()
diff --git a/Misc/NEWS b/Misc/NEWS
index c02518f..cfc0388 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -1,4 +1,4 @@
-+++++++++++
+﻿+++++++++++
 Python News
 +++++++++++
 
@@ -227,6 +227,9 @@
 Tools/Demos
 -----------
 
+- Issue #21906: Make Tools/scripts/md5sum.py work in Python 3.
+  Patch by Zachary Ware.
+
 - Issue #21629: Fix Argument Clinic's "--converters" feature.
 
 
diff --git a/Tools/scripts/md5sum.py b/Tools/scripts/md5sum.py
index 521960c..9cf4bdc 100755
--- a/Tools/scripts/md5sum.py
+++ b/Tools/scripts/md5sum.py
@@ -9,7 +9,7 @@
 rmode = 'rb'
 
 usage = """
-usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
+usage: md5sum.py [-b] [-t] [-l] [-s bufsize] [file ...]
 -b        : read files in binary mode (default)
 -t        : read files in text mode (you almost certainly don't want this!)
 -l        : print last pathname component only
@@ -17,6 +17,7 @@
 file ...  : files to sum; '-' or no files means stdin
 """ % bufsize
 
+import io
 import sys
 import os
 import getopt
@@ -24,7 +25,7 @@
 
 def sum(*files):
     sts = 0
-    if files and isinstance(files[-1], file):
+    if files and isinstance(files[-1], io.IOBase):
         out, files = files[-1], files[:-1]
     else:
         out = sys.stdout
@@ -53,12 +54,14 @@
     return sts
 
 def printsumfp(fp, filename, out=sys.stdout):
-    m = md5.new()
+    m = md5()
     try:
         while 1:
             data = fp.read(bufsize)
             if not data:
                 break
+            if isinstance(data, str):
+                data = data.encode(fp.encoding)
             m.update(data)
     except IOError as msg:
         sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))
