アフィン暗号についてのメモ
アフィン暗号の復号化についての情報が、検索してもすぐには見つけられなかったのでメモ。
アフィン暗号は文字 r を2つのキー a,b を用い、E(r)=(a*r+b)%N 式により暗号化、D(r)=((r-b+N*k)/a)%N 式により復号化する方法(Nは文字種数、k は(r-b+N*k)0 (mod a) を満たす正整数で、a,bは互いに素である必要がある)。
以下は小文字('a'~'z')のみを暗号・復号化する場合の実装例:
const static int N = 26; // アフィン暗号化 char encode(const char r, const int a, const int b) { if (islower(r)) { return ((a*(r-'a') + b) % N) + 'a'; } else { return r; } } // アフィン復号化 char decode(const char r, const int a, const int b) { if (islower(r)) { int t = (r-'a') - b; while (t%a != 0) { t += N; } return (t/a) % N + 'a'; } else { return r; } }