diff --git a/sshkey/models.py b/sshkey/models.py
index 6b73e9b..d171ff2 100644
--- a/sshkey/models.py
+++ b/sshkey/models.py
@@ -1,7 +1,6 @@
 from django.db import models
-from django.dispatch import receiver
-from django.db.models.signals import pre_save
 from django.contrib.auth.models import User
+from django.core.exceptions import ValidationError
 from sshkey.util import sshkey_fingerprint
 
 class UserKey(models.Model):
@@ -18,6 +17,8 @@ class UserKey(models.Model):
   def __unicode__(self):
     return unicode(self.user) + u': ' + self.name
 
-@receiver(pre_save, sender=UserKey, dispatch_uid=__name__ + '.set_fingerprint')
-def set_fingerprint(sender, instance, **kwargs):
-  instance.fingerprint = sshkey_fingerprint(instance.key)
+  def clean(self):
+    try:
+      self.fingerprint = sshkey_fingerprint(self.key)
+    except Exception, e:
+      raise ValidationError('Not a valid SSH key: ' + str(e))
diff --git a/sshkey/util.py b/sshkey/util.py
index c7fc689..8241fee 100644
--- a/sshkey/util.py
+++ b/sshkey/util.py
@@ -7,7 +7,7 @@ sshkey_re = re.compile(r'\s*(?:(?P<options>.*?)\s+)?(?P<type>ssh-\w+)\s+(?P<key>
 def sshkey_fingerprint(key_line):
   match = sshkey_re.match(key_line)
   if not match:
-    return None
+    raise Exception('Key is not in OpenSSH authorized_keys format')
   key = base64.b64decode(match.group('key'))
   fp_plain = hashlib.md5(key).hexdigest()
   return ':'.join(a+b for a,b in zip(fp_plain[::2], fp_plain[1::2]))