diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py
index 780b0c0..b61d149 100644
--- a/django/contrib/auth/forms.py
+++ b/django/contrib/auth/forms.py
@@ -20,19 +20,21 @@ class ReadOnlyPasswordHashWidget(forms.Widget):
     def render(self, name, value, attrs):
         encoded = value
 
-        if not is_password_usable(encoded):
-            return "None"
-
         final_attrs = self.build_attrs(attrs)
 
-        try:
-            hasher = identify_hasher(encoded)
-        except ValueError:
-            summary = "<strong>Invalid password format or unknown hashing algorithm.</strong>"
+        if encoded == UNUSABLE_PASSWORD:
+            summary = "<strong>%s</strong>" % ugettext(
+                "Unusable password, the user cannot login.")
         else:
-            summary = ""
-            for key, value in hasher.safe_summary(encoded).iteritems():
-                summary += "<strong>%(key)s</strong>: %(value)s " % {"key": ugettext(key), "value": value}
+            try:
+                hasher = identify_hasher(encoded)
+            except ValueError:
+                summary = "<strong>%s</strong>" % ugettext(
+                    "Invalid password format or unknown hashing algorithm.")
+            else:
+                summary = ""
+                for key, value in hasher.safe_summary(encoded).iteritems():
+                    summary += "<strong>%(key)s</strong>: %(value)s " % {"key": ugettext(key), "value": value}
 
         return mark_safe("<div%(attrs)s>%(summary)s</div>" % {"attrs": flatatt(final_attrs), "summary": summary})
 
diff --git a/django/contrib/auth/hashers.py b/django/contrib/auth/hashers.py
index 96ec40b..18a11a4 100644
--- a/django/contrib/auth/hashers.py
+++ b/django/contrib/auth/hashers.py
@@ -27,7 +27,13 @@ def reset_hashers(**kwargs):
 
 
 def is_password_usable(encoded):
-    return (encoded is not None and encoded != UNUSABLE_PASSWORD)
+    if encoded is None or encoded == UNUSABLE_PASSWORD:
+        return False
+    try:
+        hasher = identify_hasher(encoded)
+    except ValueError:
+        return False
+    return True
 
 
 def check_password(password, encoded, setter=None, preferred='default'):
diff --git a/django/contrib/auth/tests/forms.py b/django/contrib/auth/tests/forms.py
index 2ab8958..f3d9bfb 100644
--- a/django/contrib/auth/tests/forms.py
+++ b/django/contrib/auth/tests/forms.py
@@ -234,23 +234,31 @@ class UserChangeFormTest(TestCase):
         # Just check we can create it
         form = MyUserForm({})
 
+    def test_unsuable_password(self):
+        user = User.objects.get(username='empty_password')
+        user.set_unusable_password()
+        user.save()
+        form = UserChangeForm(instance=user)
+        self.assertIn(_("Unusable password, the user cannot login."),
+            form.as_table())
+
     def test_bug_17944_empty_password(self):
         user = User.objects.get(username='empty_password')
         form = UserChangeForm(instance=user)
-        # Just check that no error is raised.
-        form.as_table()
+        self.assertIn(_("Invalid password format or unknown hashing algorithm."),
+            form.as_table())
 
     def test_bug_17944_unmanageable_password(self):
         user = User.objects.get(username='unmanageable_password')
         form = UserChangeForm(instance=user)
-        # Just check that no error is raised.
-        form.as_table()
+        self.assertIn(_("Invalid password format or unknown hashing algorithm."),
+            form.as_table())
 
     def test_bug_17944_unknown_password_algorithm(self):
         user = User.objects.get(username='unknown_password')
         form = UserChangeForm(instance=user)
-        # Just check that no error is raised.
-        form.as_table()
+        self.assertIn(_("Invalid password format or unknown hashing algorithm."),
+            form.as_table())
 
 
 @override_settings(USE_TZ=False, PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
diff --git a/django/contrib/auth/tests/hashers.py b/django/contrib/auth/tests/hashers.py
index 673263b..d867a57 100644
--- a/django/contrib/auth/tests/hashers.py
+++ b/django/contrib/auth/tests/hashers.py
@@ -100,6 +100,10 @@ class TestUtilsHashPass(unittest.TestCase):
         self.assertRaises(ValueError, doit)
         self.assertRaises(ValueError, identify_hasher, "lolcat$salt$hash")
 
+    def test_bad_encoded(self):
+        self.assertFalse(is_password_usable('letmein_badencoded'))
+        self.assertFalse(is_password_usable(''))
+
     def test_low_level_pkbdf2(self):
         hasher = PBKDF2PasswordHasher()
         encoded = hasher.encode('letmein', 'seasalt')
