1. 程式人生 > >仿射密碼解密

仿射密碼解密

描述

已知仿射加密的變換公式為 c = (11 * m) mod 26,試著對密文解密。

解析

這裡我們要強調的是加密過程不是對字元對應的ascii值進行加密,而是用0~25表示a~z26個英文字母。通過乘法加密和加法加密再取模。於是我們順理成章的就會想到逆向推解。當然這裡的推解過程雖然不是很直接,但是並不難,如下程式碼。另外,並不是所有的仿射加密都可以逆向解密,只有符合C = Ek(m) =(k1m + k2) mod n中gcd(k1, n) = 1時可以逆向解密。

程式碼C++

#include <iostream>
#include <cstdio>
#include <string>
char s[100]; int num[100]; int main() { while (std::cin >> s) { int len = (int)strlen(s); for (int i = 0; i < len; i++) { num[i] = s[i] - 'a' + 26; while ((num[i] - 8) % 11) { num[i] += 26; } s[i] = (num[i] - 8
) / 11 + 'a'; printf("%c", s[i]); } putchar('\n'); } return 0; }