在保持字符串同等有效的情况下对其进行视觉加扰

Visually Scrambling a String While Keeping It Equally Valid

本文关键字:视觉 情况下 字符串 有效      更新时间:2023-09-26

这更像是一件有趣的事情,但因为我很好奇。。

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

var str = "stackoverflow

现在,还要说这个字符串应该在视觉上被遮挡,这样,如果你通读,你就不会只在那里看到stackoverflow,而是会看到一些更难简单阅读的东西。我想把它变成一个数字形式,然后把它转换成像其他字符串一样读取。不知道这是否可能,但我会试试,因为它很有趣。

所以,我的问题是,在保持字符串完全有效的情况下,你个人将如何做到这一点?我个人试着放了一堆Regex,它们对我自己的娱乐毫无帮助。再说一次,这更像是因为我是一个严肃的类型,可能不会被使用。

示例:

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

输出:

stack

显然,这段代码是完全不可能的,但它只是说明了我所看到的。

Base64非常常见。不幸的是,JavaScript不提供本机Base64支持,但您可以在PHPJS中找到编码和解码功能。

示例:

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

EDIT:正如Charmander(喜欢这个名字^_^)所指出的,一些浏览器(Firefox、Chrome…)实际上支持Base64。它们只是有一些非常奇怪的函数名称:btoa()要编码,atob()要解码。

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

"'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('');
}

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];