在JavaScript中对字符串进行模糊处理和反混淆的最简单方法

时间:2013-01-22 12:42:24

标签: javascript encryption obfuscation

我正在寻找一种在JavaScript中对字符串进行模糊处理和反混淆的方法;当安全性不是问题时,我的意思是加密和解密。理想情况下JS的原生内容(如PHP中的base64_encode()base64_decode())“无需编写函数就可以将字符串转换为其他内容并再返回”。

欢迎任何建议!

3 个答案:

答案 0 :(得分:62)

您可以使用btoa()atob()btoa()就像base64_encode()atob()一样base64_decode()

以下是一个例子:

btoa('Some text'); // U29tZSB0ZXh0
atob('U29tZSB0ZXh0'); // Some text

请记住这不是保密的安全方法。 Base64是一种二进制到文本编码方案,通过将其转换为基数-64表示,以ASCII字符串格式表示二进制数据。

答案 1 :(得分:16)

值得注意的是

(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]

评估字符串"失败"没有看起来像一个字符串。说真的,把它输入节点并感到惊讶。你可以通过疯狂拼写JavaScript中的任何东西。

答案 2 :(得分:10)

我显然已经来不及回答,但我正在研究解决这个问题的另一个解决方案,而base64似乎很弱。

它的工作原理如下:

"abc;123!".obfs(13) // => "nopH>?@."
"nopH>?@.".defs(13) // => "abc;123!"

Code

/**
 * 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);
};