JavaScriptで文字列を難読化および難読化解除する方法を探しています。セキュリティが問題にならない場合の暗号化と復号化を意味します。関数を記述せずに「文字列を別の文字列に変換して再び戻す」ための、JS固有の何か(PHPのbase64_encode()
やbase64_decode()
など)が理想的です。
どんな提案も歓迎します!
それは注目に値する
(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]
文字列のように見えることなく、文字列「fail」に評価されます。真剣に、ノードに入力して驚かされます。クレイジーにすることで、JavaScriptで何でも綴ることができます。
答えには明らかに手遅れですが、問題の別の解決策に取り組んでおり、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);
};