2015年8月30日日曜日

150830(2)

Ruby


アフィン暗号(2)

ずらさない(すなわちb = 0)とき、φ(26) = 12 パターンあるのが、
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"がどのように暗号化
されるか試してみた。

@ary = ('A'..'Z').to_a

# y = a * x + b
def affine(a, b, str)
  h = {}
  (0..25).each{|i| h[@ary[i]] = @ary[(a * i + b) % 26]}
  (0..str.size - 1).each{|i| str[i] = h[str[i]]}
  str
end

def decode(a, b, str)
  g = {}
  (0..25).each{|i| g[@ary[(a * i + b) % 26]] = @ary[i]}
  (0..str.size - 1).each{|i| str[i] = g[str[i]]}
  str
end

(0..11).each{|i|
  p affine(7 ** i, 0, @ary.join)
}

出力結果
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"AHOVCJQXELSZGNUBIPWDKRYFMT"
"AXUROLIFCZWTQNKHEBYVSPMJGD"
"AFKPUZEJOTYDINSXCHMRWBGLQV"
"AJSBKTCLUDMVENWFOXGPYHQZIR"
"ALWHSDOZKVGRCNYJUFQBMXITEP"
"AZYXWVUTSRQPONMLKJIHGFEDCB"
"ATMFYRKDWPIBUNGZSLEXQJCVOH"
"ADGJMPSVYBEHKNQTWZCFILORUX"
"AVQLGBWRMHCXSNIDYTOJEZUPKF"
"ARIZQHYPGXOFWNEVMDULCTKBSJ"
"APETIXMBQFUJYNCRGVKZODSHWL"

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。