PythonでXOR暗号を実装する方法についてソースコード付きでまとめました。
XOR暗号の実装例
XOR暗号とは、その名の通り、排他的論理和(XOR, 記号:⊕)を用いた暗号化手法です。
排他的論理輪(XOR)には、以下のような2つの特徴があります。
– | XORの性質 |
---|---|
① | 与えられた2つのビットのうち片方が1、もう一方が0のときに1になる |
② | ビット列Xに対してビット列YでXOR演算した結果に対し、再びビット列YでXOR演算すると元のビット列Xに戻る |
これらの性質(特に②)を利用した暗号化がXOR暗号です。
XOR暗号では、平文(暗号化するデータ)に鍵(パスワード)をXOR演算することで暗号文を生成します。
そして、暗号文に対して鍵でXORすると復号化(暗号解除)します。
XOR暗号は、基本的に鍵さえバレなければ解読は困難です。
今回は、これをPython3のchr・ord関数で実装してみます。
– | 関連ページ |
---|---|
原理 | ■【XOR暗号】原理・アルゴリズム・例題 |
参考 | ■【Python】chr・ord関数で「文字」「アスキーコード(ascii)」の相互変換 ■【ASCII】アスキーコードの一覧表 |
サンプルコード
サンプルプログラムのソースコードです。
# XOR暗号で暗号化 def xor_encrypt(plaintext, key): return "".join([chr(ord(c1) ^ ord(c2)) for (c1,c2) in zip(plaintext, key)]) # XOR暗号で復号化 def xor_decrypt(ciphertext, key): return "".join([chr(ord(c1) ^ ord(c2)) for (c1,c2) in zip(ciphertext, key)]) # 平文 plaintext = "Excalibur" # キー key = "savarmajikawaii" # 平文の表示 print("平文 : " + plaintext) # 暗号化 ciphertext = xor_encrypt(plaintext, key) print("暗号文 : " + ciphertext) # 復号化 ciphertext = xor_decrypt(ciphertext, key) print("復号文 : " + ciphertext)
※鍵は平文よりも文字数を大きくする必要があります。
– | 関連記事 |
---|---|
1 | ■【Python】データの暗号化・サンプル例 |
2 | ■Python入門 基本文法 |
コメント