你如何处理Javascript中Caesar密码的转变?

时间:2016-04-23 18:29:22

标签: javascript arrays encryption caesar-cipher

我试图在Javascript中创建一个caesar密码,并且无法弄清楚如何进行转换。可能是我的方法使它变得复杂,但我试图理解如何设置添加数字的最大值,但是从最小数字开始继续添加。这是我的代码:

$(document).ready(function(){
var alpha = [];
var encoded = [];
alpha = {
    '1': 'a',
    '2': 'b',
    '3': 'c',
    '4': 'd',
    '5': 'e',
    '6': 'f',
    '7': 'g',
    '8': 'h',
    '9': 'i',
    '10': 'j',
    '11': 'k',
    '12': 'l',
    '13': 'm',
    '14': 'n',
    '15': 'o',
    '16': 'p',
    '17': 'q',
    '18': 'r',
    '19': 's',
    '20': 't',
    '21': 'u',
    '22': 'v',
    '23': 'w',
    '24': 'x',
    '25': 'y',
    '26': 'z'
};
$('#cipher_form').submit(function(event){
    event.preventDefault();
    var input = $('#cipher_input').val();
    var key = $('#cipher_key').val();
    var chars = input.split('');
    for(var i = 0; i<chars.length; i++){
        console.log(chars[i]);
        for(var index in alpha){
            if(alpha[index] == input[i]){
                encoded.push(index);
            }
        }
    }

    for(var i=0; i<encoded.length; i++){
        alert(encoded[i]);

    }

});
});

因此,当表单提交时,我抓取输入值,并将其转换为字符数组。然后我遍历我的对象,找到与该字符匹配的键值对,并将该键推送到另一个数组。我的计划是遍历我的数组键并将cipher_key添加到该数字。

所以,如果这封信&#39; o&#39;是&#39; 15&#39;在我的对象中,我的cipher_key是&#39; 5&#39;,它会添加15 + 5并最终得到&#39; 20&#39;这将是&#39; t。我看到的问题是,如果我的信是&#39; z&#39;并且你添加了26 + 5,你最终会得到31,而我的对象中并不存在。

我的挑战是找出如何将cipher_key添加到我的号码一直到26,但是如果它超过26,则重置并从1开始并继续添加。所以如果这封信是&#39; z&#39;并且cipher_key是&#39; 5&#39;它需要26 + 5并最终在&#39; 5&#39;对于这封信&#39; e&#39;。

这可能吗?或者我的方法完全错了?

1 个答案:

答案 0 :(得分:1)

只需将数字放在简单数组中,但按顺序排列。
var alpha = ['a', 'b', 'c', ... 'z']
将其数值设为var value = alpha.indexOf(the_number);
然后添加密钥,并使用%防止超出您的金额。
var newNumValue = (value + key) % 26; 我想是的。它涵盖了这个问题。除此之外 - 你的方法很好,是的。
不同的方法
此外 - 如果您的文字可能包含一些特殊符号,我建议从ASCII table获取初始值。它将涵盖所有符号以及不同的小写和大写字母。而且您不需要存储该阵列。
var value = yourChar.charCodeAt(0);
要从ascii代码中获取符号,请转到var symbol = value.fromCharCode();
希望这会有所帮助。