#include <Arduino.h>
const int a = 5; // Ключ шифрования
const int b = 8; // Смещение
// Функция для нахождения обратного по модулю 26
int modInverse(int a, int m) {
for (int x = 1; x < m; x++) {
if ((a * x) % m == 1) {
return x;
}
}
return -1; // Если обратное не найдено, возвращаем -1
}
void setup() {
Serial.begin(9600); // Инициализация последовательного порта
Serial.println("Введите зашифрованный текст для расшифровки:");
}
void loop() {
if (Serial.available()) {
String input = Serial.readStringUntil('\n'); // Чтение строки из монитора порта
String decrypted = affineDecrypt(input); // Дешифрование строки
Serial.println("Расшифрованный текст:");
Serial.println(decrypted); // Вывод расшифрованной строки
}
}
String affineDecrypt(String text) {
String result = "";
int a_inv = modInverse(a, 26); // Нахождение обратного значения a по модулю 26
for (char c : text) {
if (isAlpha(c)) { // Проверяем, является ли символ буквой
char base = isUpperCase(c) ? 'A' : 'a'; // Определяем базу для верхнего/нижнего регистра
int C = c - base; // Преобразуем символ в число
int P = (a_inv * (C - b + 26)) % 26; // Применяем обратное аффинное преобразование
result += char(P + base); // Преобразуем обратно в символ
} else {
result += c; // Не изменяем пробелы и другие символы
}
}
return result;
}