A1exSun
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Я все с тем же RSA. Исправьте у меня ошибку пожалуйста. Расшифрованное сообщение != оригиналу. Код: #include <stdio.h> #include <conio.h> #include <io.h> typedef unsigned long long ull; ull pm(ull a, ull n, ull m); int main(void) { int n = 253, e = 17, d = 13; FILE *f; unsigned char fname[32], key, c1, c2; long size, i; clrscr(); printf("%40s\n\nВведiть iм'я файлу з текстом: ","RSA"); scanf(" %[^\n]",fname); f = fopen(fname,"rb+"); if (!f) printf("Не вдалося вiдкрити файл.\n"); else { printf("Оберiть операцiю i натиснiть вiдповiдну клавiшу:\n" "1. Зашифрувати текст\n2. Розшифрувати текст\n"); key = getch(); if ((key == '1') || (key == '2')) { size = filelength(fileno(f)); for (i = 0; i < size; i++) { c1 = fgetc(f); c2 = (unsigned char)(key == '1') ? pm(c1,e,n) : pm(c1,d,n); printf("%d",c2); fseek(f,i,0); fputc(c2,f); fseek(f,i+1,0); } printf("\nТекст %sшифровано!\n",(key == '1') ? "за" : "роз"); } fclose(f); } getch(); return 0; } ull pm(ull a, ull n, ull m) { // a^n % m ull r = 1; while (n) { if (n & 2) r = ((r % m) * (a % m)) % m; a = ((a % m) * (a % m)) % m; n /= 2; } return r; } | Проблема либо в числах, либо в вычислении. p = 11, q = 23. phi(n) = 220. Утром надо сдать... |