【问题标题】:How to make a simple encoder and decoder?如何制作一个简单的编码器和解码器?
【发布时间】:2014-02-02 23:55:48
【问题描述】:

我有以下代码:

<DOCTYPE HTML>
<html>

<body>
<script type="text/javascript">

//Chat Encoder
//Made by Hducke aka Hunter Ducker

//VARS
var userInputA = "";
var userInputB = "";
var result = userInputB.split("");

//FUNCTIONS

var encodeMessage = function(){

    var output = "";

    userInputB = prompt("Type your message here:", "PLEASE TYPE YOUR MESSAGE IN LOWER CASE!");

    for(var i = 0; i <= result.length; i++){
        switch(result[i]){
            case("a"):
                result[i] = "1";
            break;
            case("b"):
                result[i] = "2";
            break;
            case("c"):
                result[i] = "3";
            break;
        }

          var tempStr = "";

           result[i] + tempStr;

    }

    return tempStr;

}

var decodeMessage = function(){

}

var promptUser = function(){

    var tempBool = true;

    while(tempBool){
    userInputA = prompt("Type '1' to encode a message and '2' to decode a message!", "Type '1' or '2' here.");

    switch(userInputA){
        case("1"):
            encodeMessage();
            tempBool = false;
        break;
        case("2"):
            decodeMessage();
            tempBool = false;
        break;
        default:
            alert("Try again. Please type a '1' or a '2'.");
    }

    }
}

var printMessage = function(){
    alert(encodeMessage);
}

//LOGIC
promptUser();
printMessage();

</script>
</body>

</html>

Info: atm 的方式是接受用户输入userInputB 并将其解析为单独的字符。然后它将字符设置为不同的字符(打乱字符)。然后它将字符串输出给用户。我的目标是将它放到可以输入消息I love this website! 并将其转换为1 2324 5654 7503947 的位置。然后另一个用户可以输入编码的消息,decodeMessage 函数将解码消息并将其输出给用户。

第一个问题:目前无法正常工作。*

*编辑:现在当我在修复result[i] 后运行代码时。 Output I Get Now

第二个问题:我该怎么做(IE。有没有更好的方法)

任何提示都可以提供帮助。我对javascript有点菜鸟。谢谢!

【问题讨论】:

  • “不起作用”有点含糊。为了帮助您:“我可以(...),但是当我(...)时,(什么都没有发生/意外发生)”
  • 当我在提示(程序的编码器部分)中输入“1”时,它会将我带到编码器提示,我在其中输入一条消息。我单击确定,然后没有任何反应。 ATM 'a' 'b' 和 'c' 是唯一可以编码的字母。另外,解码器部分还没有制作。
  • 您似乎有一些语法错误。如果你有result(i),你应该使用result[i]。括号调用函数,括号获取属性。
  • 我修复了所有错误,但现在它输出了代码。 function(){ var outputStr = ""; userInputB = prompt("Type your message here:", "PLEASE TYPE YOUR MESSAGE IN LOWER CASE!"); for(var i = 0; i &lt;= result.length; i++){ switch(result[i]){ case("a"): result[i] = "1"; break; case("b"): result[i] = "2"; break; case("c"): result[i] = "3"; break; } result[i] + outputStr; } return outputStr; }
  • 评论中的代码有点难以阅读,所以用新信息编辑原始问题可能会更好。有些人把它放在一个新的段落中,以“编辑:”开头

标签: javascript chat encoder decoder


【解决方案1】:

第一个问题是您的输入; result 不会在用户输入提示时更新。

function encodeMessage() {
    var output = '';

    userInputB = prompt(...);
    result = userInputB.split('');
    ...
}

第二个问题是编码本身。不要使用巨大的switch,而是创建一个算法来执行编码。在你的例子中,你有一个简单的字符到数字的 1:1 映射,方便地按自然顺序。

您知道您的计算机将这些字母存储为数字吗? 'a' 是 97,'b' 是 98 等等,所以你可以简单地从字符中减去 96 来得到 a=1、b=2 等等。

但是,一旦您到达'j',这会给您的解码器带来问题。 “java”将被转换为“101221”,如果你简单地在它上面执行你的编码器的反向操作,你最终会得到“a`abba”。

一种选择是返回到您的编码方案和ASCII table'1' 是字符 49;也许你可以从你的字符中减去 48?然后'a' 将变为'1'(与1 没有太大区别)等等。 'j' 变成 ':',如果你编码“java”,你会得到“:1F1”。

一旦你这样做了,你的编码方案的反向将成为你的解码器。遍历编码的字符串,并添加 48 而不是减去它。

【讨论】:

  • "a`abba" -- 还有谁想把一杯java变成ABBA
【解决方案2】:

更新

我用编码和解码过程的示例场景更新了http://jsfiddle.net/ntyt4/5/。它应该给你足够的开始。


更简单的方法是使用带有键及其翻译值的字典。您可以将其存储在对象文字中:

var translation = {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": "A"    
};

我添加了一个jsfiddle 来向您展示一个示例。只需将文本框的值更改为一个值即可查看翻译。

但要记住的一件事是,您必须添加需要转换为对象文字的每个字符。例如,“a”不会为您翻译大写版本“A”,因为它是一个不同的字符。

【讨论】:

  • 这很好用,但你怎么能输入一整行文本并翻译呢。
  • 映射字典是一个合理的解决方案,虽然解码器使用相同的映射并不简单。
  • 对于整行文本,您只需逐个字符循环并继续添加到最后返回的编码字符串。至于解码字典,您可能有一个函数将顺序反转为一个新字典并以这种方式解码。 Brian,ASCII 表转换也是一个不错的主意,人们在进行这样的编码时倾向于使用它。
【解决方案3】:

我不太了解javascript,但您有三个选择:

用两个向量映射字符
如果要包含简单字符,则需要 25(a-z)+25(A-Z)+9(0-9)=59 转换。 您可以使用一种算法来执行此操作,如果在第一个向量中找到一个字母,例如在索引“6”处,则从第二个向量中的对应位置获取值。

解码也是同理,只取第二个向量,转换成第一个向量的等价物。

ASCII 表
转换为整数的 char 字母 '0' 是 48。 从 48-57 你有数字,在 65-90 范围内你有大字符,在 97-122 范围内你有小字符。如果您尝试子跟踪例如两个,您的文本将在一个简单的系统中编码。

MD5 算法
您可以使用/创建一个函数来生成文本的md5 哈希,例如 md5 中的“编码”是“84bea1f0fd2ce16f7e562a9f06ef03d3”。如果你想使用一个加密系统来加密一个区域,这是更好的方法。

【讨论】:

  • 虽然 md5 是一个受损的散列函数并且存在大型彩虹表,但 md5 不是一个“可逆”函数。对于想要加密和解密的人来说,md5 是一个糟糕的选择。
猜你喜欢
  • 2019-03-26
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多