我用JavaScript制作了Vigenère密码。
如果我在Firefox中运行我的代码,则会得到以下输出:
�QZ4Sm0] m
在Google Chrome中看起来像这样
QZ4Sm0] m
如何避免使用这些符号或如何使其可见?
我究竟做错了什么?
function vigenere(key, str, mode) {
var output = [str.length];
var result = 0;
var output_str;
for (var i = 0; i < str.length; i++) {
if (mode == 1) {
result = ((str.charCodeAt(i) + key.charCodeAt(i % key.length)) % 128);
output[i] = String.fromCharCode(result);
} else if (mode == 0) {
if (str.charCodeAt(i) - key.charCodeAt(i % key.length) < 0) {
result = (str.charCodeAt(i) - key.charCodeAt(i % key.length)) + 128;
} else {
result = (str.charCodeAt(i) - key.charCodeAt(i % key.length)) % 128;
}
output[i] = String.fromCharCode(result);
}
}
output_str = output.join('');
return output_str;
}
console.log(vigenere("Key", "Plaintext", 1))
最佳答案
您的第一次计算会在所有浏览器中给出esc(#27)。在Firefox中可见,但在Chrome中不可见
这给了Zpysrrobr:https://www.nayuki.io/page/vigenere-cipher-javascript
function vigenere(key, str, mode) {
var output = [str.length];
var result = 0;
var output_str;
for (var i = 0; i < str.length; i++) {
if (mode == 1) {
result = ((str.charCodeAt(i) + key.charCodeAt(i % key.length)) % 128);
output[i] = String.fromCharCode(result);
console.log(
str[i],key[i],result,output[i])
} else if (mode == 0) {
if (str.charCodeAt(i) - key.charCodeAt(i % key.length) < 0) {
result = (str.charCodeAt(i) - key.charCodeAt(i % key.length)) + 128;
} else {
result = (str.charCodeAt(i) - key.charCodeAt(i % key.length)) % 128;
}
output[i] = String.fromCharCode(result);
}
}
output_str = output.join('');
return output_str;
}
console.log(vigenere("Key", "Plaintext", 1))