【发布时间】:2018-08-20 02:04:35
【问题描述】:
我正在寻找使用 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;
}
如果需要,可以测试加密here。任何帮助将不胜感激。
编辑: 我注意到每四个特殊字符,就有一个对密码正确的常规字符块。我不知道为什么。这完全让我感到困惑。
【问题讨论】:
-
你能举个例子吗?
-
我想知道编写你的密码是否更容易,以便它只将特殊字符映射到自己。
-
我看不到任何方法可以记住加密/编码后特殊字符应该在哪里,而不是完整地存储原始字符串。也许这会破坏您在这里尝试做的事情的目的。
-
只是
if (isSpecial) result[i] = input[i] else result[i] = encode(input[i])? -
@Bergi 我试了一下,它显着减少了我的代码长度,所以谢谢。不幸的是,它并没有解决我的问题;我仍然得到完全相同的错误。我更新了上面的问题以合并此方法。如果你能看一下那就太好了。
标签: javascript encryption