0

我正在寻找超快速和紧凑的 Javascript 代码或函数来加扰和解扰存储在数组中的文本。

当用户使用浏览器进入“查看源代码”模式时,我只希望此文本不可读。

有许多选项,例如将固定数字添加到 ASCII 代码或对字符串进行一些布尔计算,例如移位、反转、更改为八进制、十六进制等。

对于文本和数字字符串,我都需要它。最好是乱码不复杂且不带有“、'、#、$、&、/等符号。

var c = new Array();
c[0]=new Array( "Name","Home","City","Post code","Telephone","email","Web","Id","Number","xpos","ypos");
c[1]=new Array( "John","Street 123","1234","New York","555-1450123","john@demo.com","www.demo1.com","b",59,306380,565500);
c[2]=new Array( "Poul","Street 1234","2345","New York","555-7010123","poul@demo.com","www.demo2.com","i",113,308396,635477);
c[3]=new Array( "David","Street 12345","3456","New York","555-3111123","david@demo.com","www.demo3.com","i",129,377615,581358);

var Scrambler = function(n) { return ASCII(n)+1...; }
var DeScrambler = function(n) { return ASCII(n)-1...; }

$(function() {
for (var i = 0; i < c[0].length; ++i) {
    for (var j = 0; j < (c.length); ++i) {
        a[j][i] = DeScrambler(c[j][i]);
        }   
    }
});

有什么好主意吗?

4

3 回答 3

1

ROT13、 ROT47 或其他替代密码怎么样?它实现简单,速度快,并且不会增加字符串的长度。

于 2013-06-29T16:19:59.857 回答
0

我制作了这个可行的解决方案来解决我的问题:

如果可能的话,我想在这段代码中做得更好。

1)在第 33 行,我必须使用这个肮脏的技巧""+c[i][j])将 Array 中的数字转换为字符串。但是当回去时,问题是我的数组中不再是数字了!这非常快,但是如果您有更好的想法而又不丢失数字定义,那么请。让我知道。2)我正在使用 2 个版本的 ROT13 和 ROT18。我找到了ROT13单行代码版本:s.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}); 如何以简单的方式将数字和-_@字母添加到ROT13?3)如您所见,我正在使用 2D 数组来存储我的代码。有更好的建议吗?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>

<script type="text/javascript">

    var AscII = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@.-";
    var ROT18 = "STUVWXYZ0123456789@.-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR";
    var c = new Array();
    c[0]=new Array( "Name","Home","City","Post code","Telephone","email","Web","Id","Number","xpos","ypos");
    c[1]=new Array( "John","Street 123","1234","New York","438-1450123","john@demo.com","www.demo1.com","b",59,306380,565500);
    c[2]=new Array( "Poul","Street 1234","2345","New York","450-7010123","poul@demo.com","www.demo2.com","i",113,308396,6354772);
    c[3]=new Array( "David","Street 12345","3456","New York","451-3111123","david@demo.com","www.demo3.com","i",129,377615,581358);

$(function() {

    var Normal = function() {
        var txt ="";
        for (var i = 0; i < c.length; ++i) {
            for (var j = 0; j < c[0].length; ++j) {
                txt += ""+c[i][j] + ", ";
                }
            txt += "<br>";
            }
        $("#kData").html("<b>Normal ASCII<br></b>" + txt);
        };

    var Convert18 = function(Div, TxtFrom, TxtTo) {
        var txt ="";
        for (var i = 0; i < c.length; ++i) {
            for (var j = 0; j < c[0].length; ++j) {
                var ktxtX = decode((""+c[i][j]), TxtFrom, TxtTo);
                c[i][j] = ktxtX;
                txt += ktxtX + ", ";
                }
            txt += "<br>";
            }
        $(Div).html("<b>ROT18 + Numbers + @-_<br></b>" + txt);
        };

    var Convert13 = function(Div) {
        var txt ="";
        for (var i = 0; i < c.length; ++i) {
            for (var j = 0; j < c[0].length; ++j) {
                var ktxtX = rot13(""+c[i][j]);
                // s.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);});
                c[i][j] = ktxtX;
                txt += ktxtX + ", ";
                }
            txt += "<br>";
            }
        $(Div).html("<b>ROT13<br></b>" + txt);
        };

    var decode = function (txt, alphabet, substitution) {
      return txt.split("").map(function (c) {
        if (alphabet.indexOf(c) != -1) { return substitution.charAt(alphabet.indexOf(c)); }
          else { return c; }
      }).join("");
    };

    function rot13(str) {
      return str.replace(/[a-zA-Z]/g, function(c) {
        return String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
      });
    }

Normal();
Convert18("#kData2", AscII, ROT18);
Convert18("#kData3", ROT18, AscII);
Convert13("#kData4");
Convert13("#kData5");
$("#kData6").html("Finised - j:" + c[0].length + " - i:" + c.length);

});

</script>

</head>
<body>
    <div id="kData"></div>
    <div id="kData2"></div>
    <div id="kData3"></div>
    <div id="kData4"></div>
    <div id="kData5"></div>
    <div id="kData6"></div>
</body>
</html>

我将代码副本放在http://jsfiddle.net/kpsphoto/b7MaQ/

于 2013-07-01T00:25:10.327 回答
0

如果您对文本进行打乱,用户将能够看到正在传输的数据。如果您只想使用 JS 并使其通用,也许让服务器以 UTF8 字节发送该数据?这也不属于加密。加密和混淆是不一样的。我提供了一个 github 文件的链接,该文件进行基本和数据类型转换。我假设你在哪里寻找这样的东西。

https://github.com/CubanAzcuy/JSBytes/blob/master/Format.js

(所有字节到 UTF8 字符串的操作都作为无符号字节完成)(我同意 @mishik minify(ing) 你的代码是最好的混淆方法之一)

于 2013-06-29T14:52:18.177 回答