您如何处理 Javascript 中凯撒密码的移位?
How do you handle the shift on a Caesar cipher in Javascript?
我正在尝试在 Javascript 中创建一个凯撒密码,但无法弄清楚如何进行转换。可能是我的方法使它复杂化了,但我试图了解如何设置添加数字的最大值,但从最小数字开始继续添加。这是我的代码:
$(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 添加到该数字。
因此,如果字母 'o' 在我的对象中是“15”,而我的 cipher_key 是“5”,它将添加 15+5 并以“20”结尾,这将是't'。我看到的问题是,如果我的字母是 'z' 并且你添加 26 + 5,你最终会得到 31,这在我的对象中不存在。
我的挑战是找出如何将 cipher_key 添加到我的号码一直到 26,但如果它超过 26,请重置并从 1 开始并继续添加。因此,如果字母是 'z' 而 cipher_key 是 '5',则字母 'e'.
需要 26+5 并以 '5' 结尾
这可以吗?还是我的做法完全错误?
只是简单数组中的数字,但要按顺序排列。
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();
希望这对您有所帮助。
我正在尝试在 Javascript 中创建一个凯撒密码,但无法弄清楚如何进行转换。可能是我的方法使它复杂化了,但我试图了解如何设置添加数字的最大值,但从最小数字开始继续添加。这是我的代码:
$(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 添加到该数字。
因此,如果字母 'o' 在我的对象中是“15”,而我的 cipher_key 是“5”,它将添加 15+5 并以“20”结尾,这将是't'。我看到的问题是,如果我的字母是 'z' 并且你添加 26 + 5,你最终会得到 31,这在我的对象中不存在。
我的挑战是找出如何将 cipher_key 添加到我的号码一直到 26,但如果它超过 26,请重置并从 1 开始并继续添加。因此,如果字母是 'z' 而 cipher_key 是 '5',则字母 'e'.
需要 26+5 并以 '5' 结尾这可以吗?还是我的做法完全错误?
只是简单数组中的数字,但要按顺序排列。
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();
希望这对您有所帮助。