diff --git a/django/contrib/auth/hashers.py b/django/contrib/auth/hashers.py
index 5824685..769ba32 100644
--- a/django/contrib/auth/hashers.py
+++ b/django/contrib/auth/hashers.py
@@ -37,6 +37,9 @@ def check_password(password, encoded, setter=None, preferred='default'):
 
     if len(encoded) == 32 and '$' not in encoded:
         hasher = get_hasher('unsalted_md5')
+    elif len(encoded) == 37 and encoded.startswith('md5$$'):
+        hasher = get_hasher('unsalted_md5')
+        encoded = encoded[5:]
     else:
         algorithm = encoded.split('$', 1)[0]
         hasher = get_hasher(algorithm)
diff --git a/django/contrib/auth/tests/hashers.py b/django/contrib/auth/tests/hashers.py
index 8a11511..c0adb3b 100644
--- a/django/contrib/auth/tests/hashers.py
+++ b/django/contrib/auth/tests/hashers.py
@@ -59,6 +59,11 @@ class TestUtilsHashPass(unittest.TestCase):
         self.assertTrue(is_password_usable(encoded))
         self.assertTrue(check_password(u'letmein', encoded))
         self.assertFalse(check_password('letmeinz', encoded))
+        # Alternate unsalted syntax
+        alt_encoded = "md5$$%s" % encoded
+        self.assertTrue(is_password_usable(alt_encoded))
+        self.assertTrue(check_password(u'letmein', alt_encoded))
+        self.assertFalse(check_password('letmeinz', alt_encoded))
 
     @skipUnless(crypt, "no crypt module to generate password.")
     def test_crypt(self):
