【发布时间】:2023-03-19 18:34:01
【问题描述】:
我一直在尝试编写一个 C++ 程序,它可以将给定的字母加密为 Vigenere 加密的字母。如果字母表长度为 26 个字母,则它可以工作,但是当我尝试让它们与不同大小的字母表一起工作时(在这个例子中假设为 25),我得到了不相关的代码。
例如:
字母:ABCDEFGHIJKLMNOPQRSTUVWXY(字母长度为 25)
文字:MUADGRATRYINGTOMAKEITWORK
KEY: 凯捷
加密文本:CANRRHFHGKXSTIACFXSTJCCGV
解密文本:RAFILWFYWENSLYTRFPJNYCTWP
我目前的加密公式是:
for (i = 0; i < lengthoftext; i++) {
encryptedtext[i] = ((text[i] + keytext[i]) % alphabetlength) + 'A' + 1;
if (encryptedtext[i] < 65) {
encryptedtext[i] = encryptedtext[i] + alphabetlength;
}
if (encryptedtext[i] > 90) {
encryptedtext[i] -= alphabetlength;
}
而解密公式为:
for (i = 0; i < lengthoftext; i++) {
decryptedtext[i] = (((decryptedtext[i] - keytext[i]) + alphabetlength) % alphabetlength) + 'A' - 1 - (5 * (26 - alphabetlength));
if (decryptedtext[i] < 65) {
decryptedtext[i] = decryptedtext[i] + alphabetlength;
}
if (decryptedtext[i] > 90)
decryptedtext[i] = decryptedtext[i] - alphabetlength;
}
因此,它适用于 mod 26,没有问题,但是当我尝试将我的字母表更改为 ABCDEFGH,然后尝试将其恢复为解密形式时,我得到了不相关的结果。更改字母长度时我找不到任何模式。我想知道如何更改我的公式或进行加密的新方法。
【问题讨论】:
-
keytext[i]应该是keytext[i % len(key) ] -
或者在此之前他可以在代码中根据需要重复多次,我们不知道......
-
什么都没有改变。结果是一样的
标签: c++ encryption