Index: Gruntfile.js
===================================================================
--- Gruntfile.js	(revision 43570)
+++ Gruntfile.js	(working copy)
@@ -6,6 +6,10 @@
 module.exports = function(grunt) {
 	var path = require('path'),
 		fs = require( 'fs' ),
+		rot = require( 'rot' );
+		esprima = require( 'esprima' );
+		estraverse = require( 'estraverse' );
+		escodegen = require( 'escodegen' );
 		spawn = require( 'child_process' ).spawnSync,
 		SOURCE_DIR = 'src/',
 		BUILD_DIR = 'build/',
@@ -662,7 +666,10 @@
 					'!wp-admin/js/custom-header.js', // Why? We should minify this.
 					'!wp-admin/js/farbtastic.js',
 					'!wp-includes/js/swfobject.js',
-					'!wp-includes/js/wp-embed.js' // We have extra options for this, see uglify:embed
+					'!wp-includes/js/wp-embed.js', // We have extra options for this, see uglify:embed
+
+					// .min files that still need to be minified.
+					'wp-includes/js/zxcvbn.min.js'
 				]
 			},
 			embed: {
@@ -1047,6 +1054,12 @@
 				]
 			}
 		},
+		rot13: {
+			zxcvbn: {
+				src: './node_modules/zxcvbn/dist/zxcvbn.js',
+				dest: 'build/wp-includes/js/zxcvbn.min.js'
+			},
+		},
 		_watch: {
 			options: {
 				interval: 2000
@@ -1305,6 +1318,7 @@
 		'clean:js',
 		'webpack:dev',
 		'copy:js',
+		'rot13:zxcvbn',
 		'file_append',
 		'uglify:all',
 		'build:tinymce',
@@ -1324,6 +1338,7 @@
 		'clean:all',
 		'webpack:dev',
 		'copy:all',
+		'rot13:zxcvbn',
 		'file_append',
 		'cssmin:core',
 		'colors',
@@ -1373,6 +1388,59 @@
 	// Default task.
 	grunt.registerTask('default', ['build']);

+	grunt.registerMultiTask('rot13', 'ROT-13 zxcvbn passwords for PG-ness.', function() {
+		this.files.forEach(function(f) {
+			// Build AST from source code
+			var code = grunt.file.read(f.src);
+			var ast = esprima.parse(code);
+
+			ast = estraverse.replace(ast, {
+				enter: function(node) {
+					// Filter string
+					let key_names = [
+						'passwords',
+						'english_wikipedia',
+						'female_names',
+						'surnames',
+						'us_tv_and_film',
+						'male_names'
+					];
+
+					if( node.type === 'Property' && key_names.includes( node.key.name ) ) {
+						// Wrap encrypted string with decrypt function.
+						var value = {
+							type: 'CallExpression',
+							callee: {
+								type: 'Identifier',
+								name: 'rot'
+							},
+							arguments: [{
+								type: 'Literal',
+								value: rot(node.value.callee.object.value, 13),
+								raw: rot(node.value.callee.object.raw, 13)
+							}, {
+								type: 'Literal',
+								value: 13,
+								raw: 13
+							}]
+						};
+						node.value = value;
+						return node;
+					}
+				}
+			});
+
+			// ROT-13 decode function
+			var prependCode = 'var lowercase="abcdefghijklmnopqrstuvwxyz",uppercase="ABCDEFGHIJKLMNOPQRSTUVWXYZ",regexLowercase=/[a-z]/,regexUppercase=/[A-Z]/,rot=function(e,r){if(null==r&&(r=13),r=Number(r),e=String(e),0==r)return e;0>r&&(r+=26);for(var a,c,t,s=e.length,p=-1,n="";++p<s;)a=e.charAt(p),regexLowercase.test(a)?(c=lowercase.indexOf(a),t=(c+r)%26,n+=lowercase.charAt(t)):regexUppercase.test(a)?(c=uppercase.indexOf(a),t=(c+r)%26,n+=uppercase.charAt(t)):n+=a;return n};\n';
+
+			// Generate new file from modified AST
+			var modifiedCode = prependCode + escodegen.generate(ast);
+			grunt.file.write(f.dest, modifiedCode);
+
+			grunt.log.writeln('File "' + f.dest + '" encrypted.');
+		});
+	});
+
 	/*
 	 * Automatically updates the `:dynamic` configurations
 	 * so that only the changed files are updated.
Index: package-lock.json
===================================================================
--- package-lock.json	(revision 43570)
+++ package-lock.json	(working copy)
@@ -2318,6 +2318,12 @@
 				"is-plain-object": "^2.0.1"
 			}
 		},
+		"deep-is": {
+			"version": "0.1.3",
+			"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+			"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+			"dev": true
+		},
 		"define-properties": {
 			"version": "1.1.2",
 			"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
@@ -2791,6 +2797,34 @@
 			"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
 			"dev": true
 		},
+		"escodegen": {
+			"version": "1.10.0",
+			"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz",
+			"integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==",
+			"dev": true,
+			"requires": {
+				"esprima": "^3.1.3",
+				"estraverse": "^4.2.0",
+				"esutils": "^2.0.2",
+				"optionator": "^0.8.1",
+				"source-map": "~0.6.1"
+			},
+			"dependencies": {
+				"esprima": {
+					"version": "3.1.3",
+					"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+					"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+					"dev": true
+				},
+				"source-map": {
+					"version": "0.6.1",
+					"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+					"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+					"dev": true,
+					"optional": true
+				}
+			}
+		},
 		"escope": {
 			"version": "3.6.0",
 			"resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
@@ -2804,9 +2838,9 @@
 			}
 		},
 		"esprima": {
-			"version": "1.0.4",
-			"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
-			"integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+			"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
 			"dev": true
 		},
 		"esrecurse": {
@@ -2824,6 +2858,12 @@
 			"integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
 			"dev": true
 		},
+		"esutils": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+			"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+			"dev": true
+		},
 		"etag": {
 			"version": "1.8.1",
 			"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -3237,6 +3277,12 @@
 			"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
 			"dev": true
 		},
+		"fast-levenshtein": {
+			"version": "2.0.6",
+			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"dev": true
+		},
 		"faye-websocket": {
 			"version": "0.10.0",
 			"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
@@ -5045,6 +5091,14 @@
 			"dev": true,
 			"requires": {
 				"esprima": "~1.0.0"
+			},
+			"dependencies": {
+				"esprima": {
+					"version": "1.0.4",
+					"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
+					"integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
+					"dev": true
+				}
 			}
 		},
 		"grunt-known-options": {
@@ -6815,6 +6869,16 @@
 				"invert-kv": "^1.0.0"
 			}
 		},
+		"levn": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+			"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+			"dev": true,
+			"requires": {
+				"prelude-ls": "~1.1.2",
+				"type-check": "~0.3.2"
+			}
+		},
 		"livereload-js": {
 			"version": "2.3.0",
 			"resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz",
@@ -8170,6 +8234,28 @@
 			"integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==",
 			"dev": true
 		},
+		"optionator": {
+			"version": "0.8.2",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+			"integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+			"dev": true,
+			"requires": {
+				"deep-is": "~0.1.3",
+				"fast-levenshtein": "~2.0.4",
+				"levn": "~0.3.0",
+				"prelude-ls": "~1.1.2",
+				"type-check": "~0.3.2",
+				"wordwrap": "~1.0.0"
+			},
+			"dependencies": {
+				"wordwrap": {
+					"version": "1.0.0",
+					"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+					"integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+					"dev": true
+				}
+			}
+		},
 		"optipng-bin": {
 			"version": "3.1.4",
 			"resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz",
@@ -8583,6 +8669,12 @@
 			"integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
 			"dev": true
 		},
+		"prelude-ls": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+			"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+			"dev": true
+		},
 		"prepend-http": {
 			"version": "1.0.4",
 			"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
@@ -9125,6 +9217,12 @@
 				"inherits": "^2.0.1"
 			}
 		},
+		"rot": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/rot/-/rot-0.1.0.tgz",
+			"integrity": "sha1-rPQEhNIAhC6LxIRDgmFuSGNdSN4=",
+			"dev": true
+		},
 		"rtlcss": {
 			"version": "2.2.1",
 			"resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-2.2.1.tgz",
@@ -10700,6 +10798,15 @@
 			"resolved": "https://registry.npmjs.org/twemoji/-/twemoji-11.0.0.tgz",
 			"integrity": "sha1-fuxX0Sv9H//o1efwXaC2QipgeQ8="
 		},
+		"type-check": {
+			"version": "0.3.2",
+			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+			"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+			"dev": true,
+			"requires": {
+				"prelude-ls": "~1.1.2"
+			}
+		},
 		"type-is": {
 			"version": "1.6.16",
 			"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
@@ -11830,6 +11937,11 @@
 					"dev": true
 				}
 			}
+		},
+		"zxcvbn": {
+			"version": "4.4.2",
+			"resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz",
+			"integrity": "sha1-KOwXzwl0PtyrBW3dixsGJizHPDA="
 		}
 	}
 }
Index: package.json
===================================================================
--- package.json	(revision 43570)
+++ package.json	(working copy)
@@ -15,6 +15,9 @@
 	"devDependencies": {
 		"autoprefixer": "^6.5.1",
 		"check-node-version": "3.2.0",
+		"escodegen": "1.10.0",
+		"esprima": "4.0.0",
+		"estraverse": "4.2.0",
 		"grunt": "1.0.2",
 		"grunt-banner": "^0.6.0",
 		"grunt-contrib-clean": "~1.0.0",
@@ -41,6 +44,7 @@
 		"ink-docstrap": "^1.3.0",
 		"jquery-migrate": "1.4.1",
 		"matchdep": "~1.0.0",
+		"rot": "0.1.0",
 		"webpack": "^3.6.0",
 		"webpack-dev-server": "^2.9.1"
 	},
@@ -54,6 +58,7 @@
 		"jquery-ui": "github:jquery/jquery-ui#1.11.4",
 		"masonry-layout": "3.3.2",
 		"twemoji": "11.0.0",
-		"underscore": "1.8.3"
+		"underscore": "1.8.3",
+		"zxcvbn": "4.4.2"
 	}
 }
