首页 > 解决方案 > 使用 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;
}

如果需要,可以在此处测试加密。任何帮助将不胜感激。

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

标签: javascriptencryption

解决方案


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

亲切的问候,


推荐阅读