51

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

欢迎任何建议!

4

3 回答 3

91

您可以使用btoa()atob()btoa()是喜欢base64_encode()atob()喜欢base64_decode()

这是一个例子:

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

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

于 2013-01-22T12:43:22.117 回答
34

值得注意的是

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

评估为字符串“失败”,而不会看起来像一个字符串。说真的,将其输入节点并感到惊讶。你可以通过发疯来用 JavaScript 拼写任何东西。

于 2017-08-01T03:15:49.353 回答
13

我显然为时已晚,但我只是在为这个问题寻找另一种解决方案,base64 似乎很弱。

它是这样工作的:

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

代码

/**
 * 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);
};
于 2016-12-30T16:00:36.267 回答