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