/** * Obfuscate a plaintext string with a simple rotation algorithm similar to * the rot13 cipher. * @param {[type]} key rotation index between 0 and n * @param {Number} n maximum char that will be affected by the algorithm * @return {[type]} obfuscated string */ String.prototype.obfs = function(key, n = 126) { // return String itself if the given parameters are invalid if (!(typeof(key) === 'number' && key % 1 === 0) || !(typeof(key) === 'number' && key % 1 === 0)) { return this.toString(); } var chars = this.toString().split(''); for (var i = 0; i < chars.length; i++) { var c = chars[i].charCodeAt(0); if (c <= n) { chars[i] = String.fromCharCode((chars[i].charCodeAt(0) + key) % n); } } return chars.join(''); }; /** * De-obfuscate an obfuscated string with the method above. * @param {[type]} key rotation index between 0 and n * @param {Number} n same number that was used for obfuscation * @return {[type]} plaintext string */ String.prototype.defs = function(key, n = 126) { // return String itself if the given parameters are invalid if (!(typeof(key) === 'number' && key % 1 === 0) || !(typeof(key) === 'number' && key % 1 === 0)) { return this.toString(); } return this.toString().obfs(n - key); };