Я довольно плохо знаком с C и недавно работал над созданием простой программы шифрования / дешифрования. Мне удалось получить хорошее шифрование, но я столкнулся с проблемой расшифровки.
Соответствующий код выглядит следующим образом:
Шифрование (где asciinum - это значение ascii для буквы, а k - ключ "vigenere", на который необходимо сместить).
//shifts lowercase letters by key
if (asciinum >= 97 && asciinum <= 123)
{
f = p % keylen;
k = key[f];
asciinum = (asciinum - 97) + k;
asciinum = (asciinum % 26) + 97;
letterc = (char) asciinum;
//printf("%c\n", letterc);
cipher[j] = letterc;
p++;
}
//shifts uppercase letters by key
if (asciinum >= 65 && asciinum <= 91)
{
f = p % keylen;
k = key[f];
asciinum = (asciinum - 65) + k;
asciinum = (asciinum % 26) + 65;
letterc = (char) asciinum;
cipher[j] = letterc;
p++;
}
Я хочу использовать аналогичную модель для расшифровки (используя тот же ключ), но метод по модулю, который я использовал, чтобы обернуть вокруг 26 символов, не работает при отрицательном значении asciinum, как было бы в случае вычитания ак 5 от (то есть 0).
Попытка расшифровки ...
//shifts uppercase letters by key
if (asciinum >= 65 && asciinum <= 91)
{
f = p % keylen;
k = key[f];
asciinum = (asciinum - 65) - k;
asciinum = (asciinum % 26) + 65;
letterc = (char) asciinum;
cipher[j] = letterc;
p++;
}
Любая помощь будет принята с благодарностью. Спасибо!