文字列を簡単な置換による暗号化したい

概要

文字列が与えられたときにシンプルな暗号化をする方法についてまとめます.これらはあまりにもシンプルなためセキュリティ等において用いられることはまずありません.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • 文字列データが入力
  • 多くの場合置換する対応表やシフトする値が事前二必要
効果
  • 文字列を置換できる
ポイント
  • 文字を置換していくだけの暗号について紹介

解 説

文字列をシンプルな暗号化したいときに使用できる安全性は低いが実装が容易な暗号について紹介します. 現代では、セキュリティ等には使用しないがぱっとわかりたくないときなどに使用する. ここで紹介する暗号は以下3つ. シーザー暗号 最もシンプルな暗号.あらかじめ決められた数だけ文字をシフトする.3と決まっていたならAをDに,BをEにする.復号するときは逆方向に同様の数を動かせばよく.暗号者と復号者ではシフトする数が共有されていればよい. XOR暗号 鍵の文字列のビット列と入力文字列のビット列のXORをとる暗号.復号するときも同様の鍵ビット列とXORすればよい. 鍵の長さが入力の文字列と同じで鍵が完全に乱数で生成されるなら完全な暗号となる. ヴィジュネル暗号 鍵の文字列と入力も文字列を一文字ずつ見て別の文字列に置換していく.シーザー暗号よりは安全だが、鍵が短いほどわかりやすい.
文字列をシンプルな暗号化したい
ここでは換字暗号について紹介しています. 換字暗号は入力された文字列を別の文字にあるルールで置換していく方法によるもので、換字暗号でないものでは、特定の文字列を別の数字に置き換えて持っておく方法や文字列の順番を交換することによって暗号化する方法などがあります.
換字暗号について

1.シーザー暗号

シーザー暗号は最も有名でシンプルな暗号.実装も容易. 各文字を(例えば)3つずらした文字に置換するのを繰り返す.文字列の中に出てくる文字の頻度が変わらないため、頻度の統計から暗号を読解することが可能. 復号するときは逆方向に文字をずらせば良い.
シーザー暗号について
Wikipediaより引用. 3つずらしの例. DOGならBEMになる.

2.XOR暗号

XOR暗号は、文字列の他に鍵となるビット列も必要. これも実装が非常に容易で、「同じ値でXORを二回行うと元の数字に戻ること」を利用している. そのため暗号化も復号化も(”与えられた文字列” XOR "鍵")をすることで暗号化した文字列も、復号化した文字列も得ることが可能. 鍵の長さが文字列の長さに一致して、その鍵が完全にランダムな生成を行えている場合それは完全な暗号になり、解読は不可能となる. 例えば3文字のものの暗号化された文字列の解読が不可能になった場合、 DOGなのかSKYなのかHEYなのかが皆目検討がつかないという状態になるということ.
XOR暗号について
$$01101001 \oplus 11110011 = 10011010$$
左端が入力文字列のビット列 中央が鍵のビット列 右端が暗号化されたビット列

3.ビジュネル暗号

ビジュネル暗号は暗号表を用いて鍵の文字列と入力の文字列で暗号化したもの. シーザー暗号よりはより解読しにくいが、こちらも解読法が存在する.
ビジュネル暗号について
ビジュネル方陣. ビジュネル暗号の暗号表となっており、縦の列が入力文字列のどれかで、横の列で鍵文字列の対応するものを見つけてその交差する文字列に置き換えていく
暗号化する人と復号化する人で、鍵の共有と上記の暗号表の共有の2点ができていることが前提となっている. 暗号化するときに使用する鍵が短いと周期性が出てしまうため、適切ではない.頻度による解析はできにくくなっており、シーザー暗号よりは安全. 数式で記述することができるため、プログラムの実装も容易です. 鍵文字列KEYと入力文字列APPLEの場合は、まず一文字ずつ先頭から文字のペアを見ていき暗号表に沿って置換して、APPLEのすべての文字列が置換できるまで繰り返します. KとAから対応表を確認してAをKに置換します.現時点ではKPPLEです. これを続くPPLEに対しても行いますが、KEYが先に終わった場合は(3文字なので先に終わります)何周もしてすべて終わるまで置換を行います.
ビジュネル暗号の詳細
この章を学んで新たに学べる
Comments

Reasons
>>隠す