使用vigenere密码加密时出现奇怪的错误

时间:2018-08-20 02:04:36

标签: javascript encryption

我正在寻找一个使用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。任何帮助将不胜感激。

编辑: 我注意到,每隔四个特殊字符,都会有一个与密码正确的常规字符块。我不知道为什么。这完全让我感到困惑。

2 个答案:

答案 0 :(得分:0)

对于任何想知道的人,我都将其修复。我注意到,在每个特殊字符之后,它们的键将后退一个字母。例如,如果键为apples,则在第一个特殊字符之后,键将变为pplesa。在第二个特殊字符之后,键将变为plesap。为了解决这个问题,我只是在if语句的末尾添加了p -= 1;以用于特殊字符。这解决了问题。谢谢所有帮助的人。

亲切的问候,

答案 1 :(得分:-1)

您可以使用ASCII值检查字符类型。由于您指定了任何非小写字母,因此如果ASCII值不在97-122范围内,则可以将字符标记为特殊字符。

您可以将原始字符串中的特殊字符存储在某种哈希图中。您可以将字符设置为键,将值设置为链接列表。链接列表可以存储字符的索引,因此您知道它们在原始字符串中的位置。