diff --git a/data-scripts/build_frequency_lists.py b/data-scripts/build_frequency_lists.py
index cd1d1d5..0e2a2f4 100755
--- a/data-scripts/build_frequency_lists.py
+++ b/data-scripts/build_frequency_lists.py
@@ -117,6 +117,7 @@ def filter_frequency_lists(freq_lists):
     return result
 
 def to_kv(lst, lst_name):
+    lst = map(lambda x : codecs.encode(x, 'rot_13'), lst)
     val = '"%s".split(",")' % ','.join(lst)
     return '%s: %s' % (lst_name, val)
 
diff --git a/src/main.coffee b/src/main.coffee
index 79f125b..ddd3c41 100644
--- a/src/main.coffee
+++ b/src/main.coffee
@@ -5,13 +5,17 @@ feedback = require './feedback'
 
 time = -> (new Date()).getTime()
 
+rot_13 = (str) ->
+  str.replace /[a-zA-Z]/g, (c) ->
+    String.fromCharCode (if ((if c <= "Z" then 90 else 122)) >= (c = c.charCodeAt(0) + 13) then c else c - 26)
+
 zxcvbn = (password, user_inputs = []) ->
   start = time()
   # reset the user inputs matcher on a per-request basis to keep things stateless
   sanitized_inputs = []
   for arg in user_inputs
     if typeof arg in ["string", "number", "boolean"]
-      sanitized_inputs.push arg.toString().toLowerCase()
+      sanitized_inputs.push rot_13(arg.toString().toLowerCase())
   matching.set_user_input_dictionary sanitized_inputs
   matches = matching.omnimatch password
   result = scoring.most_guessable_match_sequence password, matches
diff --git a/src/matching.coffee b/src/matching.coffee
index d85c145..cfb5a88 100644
--- a/src/matching.coffee
+++ b/src/matching.coffee
@@ -2,6 +2,10 @@ frequency_lists = require('./frequency_lists')
 adjacency_graphs = require('./adjacency_graphs')
 scoring = require('./scoring')
 
+rot_13 = (str) ->
+  str.replace /[a-zA-Z]/g, (c) ->
+    String.fromCharCode (if ((if c <= "Z" then 90 else 122)) >= (c = c.charCodeAt(0) + 13) then c else c - 26)
+
 build_ranked_dict = (ordered_list) ->
   result = {}
   i = 1 # rank starts at 1, not 0
@@ -103,6 +107,7 @@ matching =
     matches = []
     len = password.length
     password_lower = password.toLowerCase()
+    password_lower = rot_13(password_lower)
     for dictionary_name, ranked_dict of _ranked_dictionaries
       for i in [0...len]
         for j in [i...len]
@@ -114,7 +119,7 @@ matching =
               i: i
               j: j
               token: password[i..j]
-              matched_word: word
+              matched_word: rot_13(word)
               rank: rank
               dictionary_name: dictionary_name
               reversed: false
