【Python】XOR暗号の実装例

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

コメント