JavaScript 中的 Vigenère 密码显示或 � 字符
Vigenère cipher in JavaScript showing or � characters
我在 JavaScript 中制作了维吉尼亚密码。
如果我 运行 我在 Firefox 中的代码我得到以下输出:
�QZ4Sm0]米
在GoogleChrome中看起来像这样
QZ4Sm0]米
如何避免这些符号或如何使它们可见?
我做错了什么?
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))
尝试使用这段代码。它更简单且可读性强
function vigenereFunc(plainText, key) {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let cipherText = "";
for (let i = 0, j = 0; i < plainText.length; i++) {
if (!letters.includes(plainText[i])) {
cipherText += plainText[i];
continue;
}
cipherText += letters[(letters.indexOf(plainText[i]) + letters.indexOf(key[j])) % 26];
if(j === key.length - 1) j = -1;
return cipherText;
}
我在 JavaScript 中制作了维吉尼亚密码。
如果我 运行 我在 Firefox 中的代码我得到以下输出:
�QZ4Sm0]米
在GoogleChrome中看起来像这样
QZ4Sm0]米
如何避免这些符号或如何使它们可见? 我做错了什么?
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))
尝试使用这段代码。它更简单且可读性强
function vigenereFunc(plainText, key) {
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let cipherText = "";
for (let i = 0, j = 0; i < plainText.length; i++) {
if (!letters.includes(plainText[i])) {
cipherText += plainText[i];
continue;
}
cipherText += letters[(letters.indexOf(plainText[i]) + letters.indexOf(key[j])) % 26];
if(j === key.length - 1) j = -1;
return cipherText;
}