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入門 基本文法 |

コメント