難問克服 解いてわかるガロア理論(藤田岳彦 著)という書籍に
アフィン暗号とその復号の問題が載っていたので、
コードを書いてみました。
Ruby
1require 'OpenSSL' 2 3@ary = ('A'..'Z').to_a 4 5# y = a * x + b 6def affine(a, b, str) 7 (0..str.size - 1).each{|i| str[i] = @ary[(a * @ary.index(str[i]) + b) % 26]} 8 str 9end 10 11# y = a^(-1) * (x - b) 12def decode(a, b, str) 13 (0..str.size - 1).each{|i| str[i] = @ary[OpenSSL::BN.new("#{a}").mod_inverse(26).to_i * (@ary.index(str[i]) - b) % 26]} 14 str 15end 16 17p affine(5, 11, 'LIFEISGOOD') 18p decode(5, 11, 'OZKFZXPDDA') 19 20p decode(5, 11, 'CUFTDDY') 21p affine(5, 11, 'THEMOON')
シーザー暗号の場合は
trで置き換えるのも簡単に書けたのですが、
アフィン暗号の場合は
うまく置き換えができなかったので、上記のようになってしまいました。
アフィン暗号およびその復号をもっと簡単に書く方法はないのでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。