javascript - 使用 vigenere 密码加密时出现奇怪的错误
问题描述
我正在寻找一个程序来使用 vigenere 密码加密字符串。到目前为止,我已经成功地做到了这一点,除了特殊字符(例如空格、句号、逗号等)。
我来到了这个解决方案,其中包括正确的特殊字符。但是,字符串中第一个特殊字符之后的所有内容都会变得乱码。它们不是特殊字符,它们仍然在字母表中,尽管它们与密码不匹配。我无法弄清楚为什么会发生这种情况。我尝试了几种完全不同的方法,它们都导致了同样的错误。这是迄今为止我想出的最简洁的方法,但它仍然不起作用(对于这个示例,您可以假设文本和密钥的长度相同)。
for (i=0, l=[], k=[], output=""; i < text.length; i++) {
l[i] = (text.charCodeAt(i)) - 97;
k[i] = (key.charCodeAt(i)) - 97;
if ((l[i] > -1) && (l[i] < 26)) { // if the ASCII code is between 0 and 25
ans = parseInt(encryptLetter(l[i], k[i]));
output += String.fromCharCode(97 + ans);
};
if ((l[i] < 0) || (l[i] > 25)) { // if the ASCII code is not between 0 and 25
output += String.fromCharCode(97 + l[i])
};
};
function encryptLetter(l, k) {
en = l + k;
if (en > 25) { // if encrypted letter is greater than 26.
en -= 26;
}
return en;
}
如果需要,可以在此处测试加密。任何帮助将不胜感激。
编辑:我注意到每四个特殊字符,就有一个对密码正确的常规字符块。我不知道为什么。这完全让我感到困惑。
解决方案
对于任何想知道的人,我修复了它。我注意到在每个特殊字符之后,他们的键会向后移动一个字母。例如,如果键是apples
,那么在第一个特殊字符之后,键将变为pplesa
。在第二个特殊字符之后,键将变为plesap
。为了解决这个问题,我只是p -= 1;
在 if 语句的末尾添加了特殊字符。这解决了问题。感谢所有帮助过的人。
亲切的问候,
推荐阅读
- javascript - Laravel 和 JavaScript:反映浏览器的变化
- async-await - 异步 WebRequest 问题
- swift - 如何以编程方式构建 UIStackView Grid 并在按钮按下时更改 UILabel?
- python - 尝试使用 SKlearn 将算法应用于 Python 中的数据集时出错
- c# - Sparx EA.App 没有正确反映 Activator.CreateInstance
- django - Django模型在有关系的地方获取数据
- selenium - Selenium 命令在 Chrome 网络驱动程序中不起作用(与 firefox 一起使用)
- javascript - 在 voyager laravel 中提交任何表单时出现 js 错误
- android - Admob 更新,除非测试,否则不显示广告?
- python - AWS ServiceCatalog 预置产品错误