如何制作简单的编码器和解码器?

时间:2014-01-14 18:59:55

标签: javascript chat encoder decoder

我有以下代码:

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

信息:它的方式是用户输入userInputB并将其解析为单独的字符。然后它将字符设置为不同的字符(欺骗字符)。然后它将字符串输出给用户。我的目标是让您可以在其中输入消息I love this website!并将其转换为1 2324 5654 7503947。然后另一个用户可以输入编码消息,decodeMessage函数将解码消息并将其输出给用户。

第一期:它目前无法正常工作。*

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

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

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

3 个答案:

答案 0 :(得分:0)

<强>更新

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


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

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

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

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

答案 1 :(得分:0)

第一个问题是您的输入;当用户输入提示时,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而不是减去它。

答案 2 :(得分:0)

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

使用两个Vector 来映射字符 如果要包含简单字符,则需要25(a-z)+25(A-Z)+9(0-9)= 59转换。 你可以用一个算法来做到这一点,如果在第一个向量中找到一个字母,例如在索引“6”,则从第二个向量中的相应位置取值。

解码方法相同,只取第二个向量并将其转换为第一个向量的等效值。

ASCII表
以整数形式输入的字母'0'为48。 从48-57你有数字,在65-90范围内你有上角焦点,在97-122范围内你有较低焦点。如果您尝试子轨道,例如两个文本在一个简单的系统中编码。

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