在保持同等有效性的同时,视觉上对字符串进行加扰

时间:2012-08-03 19:34:43

标签: javascript string

这更像是一种有趣的事情,但因为我很好奇......(这实际上是混淆,但我正在解释它,所以每个人都可以从中获取一些东西)

假设我们有一个字符串(〜在JavaScript中):

var str = "stackoverflow

现在,也要说这个字符串应该在视觉上模糊不清,这样如果你要通读,你不会只看到stackoverflow,而是简单地阅读一些东西。我正在考虑将它放入数字形式,然后将其转换为像任何其他字符串一样读取。不知道是否可能,但我会尝试它,因为它很有趣。

所以,我的问题是,你是如何亲自这样做的,同时保持字符串完全有效?我个人尝试加入一堆Regex,它真的没有为我自己的乐趣做任何事情。同样,这更像是一种因为我好奇的东西,而且可能不会被使用。

示例:

var str = `s./\\t./ack;

输出:

stack

显然代码完全不可能,但它只是说明了我正在看的内容。

3 个答案:

答案 0 :(得分:1)

您可以将每个字符编码为字符实体:

"\u0073\u0074\u0061\u0063\u006b\u006f\u0076\u0065\u0072\u0066\u006c\u006f\u0077"

混淆(如果这是你的目标)在很大程度上是毫无意义的,但是根据要求,stackoverflow在字符串中不再可见。执行编码的函数:

function uniencode(str) {
    function pad(str) {
        return Array(5 - str.length).join('0') + str;
    }

    return Array.prototype.map.call(str, function(c) {
        return '\\u' + pad(c.charCodeAt(0).toString(16));
    }).join('');
}

答案 1 :(得分:1)

Base64很常见。遗憾的是,JavaScript不提供本机Base64支持,但您可以在PHPJS上找到encodingdecoding函数。

示例:

var str = "c3RhY2tvdmVyZmxvdw";
alert(base64_decode(str)); // alerts "stackoverflow"

编辑:正如Charmander所指出的那样(喜欢名字^ _ ^),有些浏览器(Firefox,Chrome ......)确实支持Base64。它们只有非常奇怪的函数名称:btoa()进行编码,atob()进行解码。

答案 2 :(得分:0)

http://www.javascriptobfuscator.com/default.aspx

var _0x6ee4=["\x73\x74\x61\x63\x6B\x6F\x76\x65\x72\x66\x6C\x6F\x77"];
var str=_0x6ee4[0];