📚

[CTF][入門] Python3環境を構築し、PyCryptodomeでAES encode/decode を行う

2022/03/30に公開約1,600字

環境

  • MacOS BigSur 11.6
  • Visual Studio Code
  • Python 3.7.7

環境構築

  1. pycryptodomeをインストールします
pip install pycryptodome

以下のエラーが出ましたが、私の環境では、以前導入したAnacondaと競合しているみたいでした。
参考記事より、 conda uninstall crypto のコードを実行することで対応しました。

  1. VSCodeの環境設定にて、Default Interpreter Path をpython3にする

  2. VSCodeでコードを実行する

実行コード

import json
from base64 import b64encode, b64decode
from Crypto.Cipher import AES

header = b'header'
data = b'kyo no bangohan ha hanba-gu'
key = b'16bytes_key12345'

cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(data)

json_k = [ 'nonce', 'header', 'ciphertext', 'tag' ]
json_v = [ b64encode(x).decode('utf-8') for x in (cipher.nonce, header, ciphertext, tag) ]
result = json.dumps(dict(zip(json_k, json_v)))
print(result)

b64 = json.loads(result)
jv = { k:b64decode(b64[k]) for k in json_k }

cipher_d = AES.new(key, AES.MODE_EAX, nonce=jv["nonce"])
text_d = cipher_d.decrypt_and_verify(jv['ciphertext'], jv['tag'])
print(text_d)
% python3 AES.py
{"nonce": "djAXMQkMXkmNY05M69qlSg==", "header": "aGVhZGVy", "ciphertext": "XTkI3vXh3wnk110dcsIEsnuCNOtXqnJLUIpl", "tag": "0adH9gDav2DRof/iVmLkmQ=="}
b'kyo no bangohan ha hanba-gu'

参考

https://okumuralab.org/~okumura/python/install.html
https://qiita.com/ynakayama/items/29efebeb38604d10acef
https://www.smartbowwow.com/2018/06/pip-installuninstall.html
https://pycryptodome.readthedocs.io/en/latest/src/cipher/modern.html?highlight=encrypt_and_digest#eax-mode-1
GitHubで編集を提案

Discussion

ログインするとコメントできます