Простейший способ обфускации и распутывания строки в JavaScript
Я ищу способ обфускации и распутывания строки в JavaScript; под которым я подразумеваю шифрование и дешифрование, когда безопасность не является проблемой. В идеале что-то родное JS (например, base64_encode()
и base64_decode()
в PHP), чтобы "превратить строку во что-то еще и обратно" без необходимости писать функцию.
Любые предложения приветствуются!
Ответы
Ответ 1
Вы можете использовать btoa() и atob(). btoa()
похож на base64_encode()
и atob()
как base64_decode()
.
Вот пример:
btoa('Some text'); //U29tZSB0ZXh0
atob('U29tZSB0ZXh0'); //Some text
Единственная проблема заключается в том, что эти функции не являются кросс-браузерами. Для кросс-браузерного кодирования/декодирования вы можете использовать http://code.google.com/p/javascriptbase64/
Ответ 2
Стоит отметить, что
(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]
оценивает строку "fail", не выглядящую как строка. Серьезно, введите его в node и поразите. Вы можете писать что-нибудь в JavaScript, будучи сумасшедшим.
Ответ 3
Я, очевидно, слишком поздно для ответа, но я просто работал над другим решением проблемы, а base64, похоже, был слабым.
Он работает следующим образом:
"abc;123!".obfs(13) // => "nopH>[email protected]"
"nopH>[email protected]".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);
};