web-dev-qa-db-fra.com

Moyen le plus simple d'obscurcir et de désobfusquer une chaîne en JavaScript

Je cherche un moyen d'obscurcir et de désobfusquer une chaîne en JavaScript; J'entends par là le cryptage et le décryptage lorsque la sécurité n'est pas un problème. Idéalement, quelque chose de natif de JS (comme base64_encode() et base64_decode() en PHP) pour "transformer une chaîne en quelque chose d'autre et vice versa" sans avoir à écrire une fonction.

Toutes les suggestions sont les bienvenues!

32
Rich Jenks

Vous pouvez utiliser btoa () et atob () . btoa() est comme base64_encode() et atob() comme base64_decode().

Voici un exemple:

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

Gardez à l'esprit que ce n'est pas un moyen sûr de garder des secrets . Base64 est un schéma de codage binaire en texte qui représente des données binaires dans un format de chaîne ASCII en les traduisant en une représentation radix-64.

64
Minko Gechev

Il convient de noter que

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

évalue la chaîne "échouer" sans jamais ressembler à une chaîne. Sérieusement, entrez-le dans le nœud et laissez-vous surprendre. Vous pouvez épeler n'importe quoi en JavaScript en étant fou.

16
GantMan

Je suis évidemment trop tard pour une réponse, mais je travaillais juste sur une autre solution au problème et la base64 semblait être trop faible.

Cela fonctionne comme ceci:

"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);
};
10
enzian