【Colab公開】AESとRSAを組み合わせてパスワード情報をセキュアに扱う方法とは?

ID情報をサーバーに置きたくない

GCPのサービスアカウントやパスワードなどシステムの認証情報をセキュアに扱いたい場面は頻繁に発生します。AESとRSAを組み合わせてセキュアにこれらの情報を暗号化・復号化するスクリプトを紹介します。

Colab notebookも公開するので実際にコードを実行することもできます。
Githubから「AES&RSA_Crypto.ipynb」にアクセスし「Open in Colab」からアクセスしてください。

Colab Notebook内ではplaintextを暗号化された情報に変換しています。

plaintext = "password"
 
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

data = plaintext.encode('utf-8')

# 鍵の生成
key = get_random_bytes(32)

# AES暗号化
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(data)
iv = cipher.nonce
 
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA

#  keyinfoとtag, iv, keyの結合
keyinfo = key + b'@' + tag + b'@' + iv

# RSA暗号化のため公開鍵の読み込み
with open("id_rsa.pub", "rb") as f:
    public_key = RSA.import_key(f.read())

# 暗号化
rsa = PKCS1_OAEP.new(public_key)
cipher_keyinfo = rsa.encrypt(keyinfo)
 
print(ciphertext)
b'0"(\x01\xce\xe10\x0c' 
 
print(cipher_keyinfo)
b'16\xa0E7]H\xa9uI\xe7\x03$\x15\xaa\xf4<\x87\xdf\xd3K\x01F\x14?\x16\xe4\xd18\xc2zk\x0cjUq\xfaV\xdc0d(\x07OK\x1a\xd3\xa2\x8b\x81\x0e\xc5\xdf\x81\x99r\xa2#\xc6)^N=\x06^\xa1\x8e\xcc\x02\x974A\xfb|c\xdf\xa1\xd09\xdf|S\x15\xf5\xdb&?\xb9t0J\xfcr\xd2\xe9\xfc\xc3\r\xda\xb0K\xed\x99\x89\xa4\xee\xb6\xbb\taF\x8e\xa5\xcb%\x9ec\x05\x8d%\x1b\x0e\xc61\xcb\xc4\xe8\x91\xe5,G1_>\xfb5,(/\xdbZ#})9XFQ\xde~\xc0\x94G\xdf/;\x06\xe5\xf49\x0b;6\xe8\xdf\xa3\x1f\xa2\x9b\x01\xc9\x99\xb3\xd2\xe4\xe9\xb4\xae\x86z\x13;\xd8\xcbY\x93\x07\xc9\xb5\x9e\xb7]3c\x0f<\x91\xa0\xb2\xfbm\xbdg\xa1\x0c\xb0Q\x0f\x86\xe2\x9ce/6\xa4\x1dG\x94W\xf1\xa9\xb9M\x96\xa08ii\xb4\xf0\xbdM\x06\n\x05\xf1\x7fID\xdf\xd7\xd0\x1cl\x18\x13\xfc\x1f>\xd2K\xb4\x19[\xeeG\x9e\xf7\xeb0u\xa41Ho5\xafN\xf0%3dVH\x91R\x99\xcd\xb0\xe1\xb7r\xbd@X\xd0\x85$`@\x05\xea6r^j\x02\xf6fn<sf\x92]\xad)\x94mGU\x0c\'\x15\x8d\x92\x0e"30\x86\xc9\xc9\x1d\xb0\xf2\xe7{\x1f@d\xae\x970\xf7\xa8\xb4v\xfd\xed\xd7\xa9eJ\xbd\xe00e\xdfc//\xc4\x03\xfa\xae\xb9]!\x0f\xd3\x93o\xcf/\xa7\x9d\x7f\xe0\x90S\xf7O)\t\xc1\xae1\xa8\x9dp\x1b\xb3\x82' 

また、base64を用いてJSONやYAMLといったテキストベースでやりとりする仕組みに対応したりpyarmorを用いて鍵情報を教えることなく暗号化したスクリプトで昨日だけを提供しています。

plaintext = "new password for pyarmor"

# JSONやYAMLに対応したbase64文字列でデータを取り扱い 
cipher_dict = encrypt(plaintext)
print(cipher_dict)
{'text': 'aXRhXGRwxYhnDmxb1SgGPX3+ZDvNztRZ',
 'key': '2y18geJ1ZhCArGlF158DDMXAAkntUlXTNPMWKrvAHXdACLfiXZP64otxM1Or0ouubr8c7hc8PW9NkscvQQbUKBsHJePkjce+oPjxGpO5D0q+oM4mkWZEXXqzbZqTQrLlrR42rS9m4/SKiV0P2RWQELEArPimffSYA5DjVxqcu9J8cC4XT2LyTyB+suJlKGP13QlptsF2+WxUzqILgnux1MJ3BLTtnexxwTAPUCUxu0PACNDhYif21N0MzptXm3lignhzddbWq2xpIjG3QaXMuV4LP5mNMbW7DgNDwGfjEg4UsFrIthDwOml/zuRR2IoXbJgkOgr1ZrKKWqztxPSUIn++MmjSXLBWVzaQPVtj638+96prMoB4J9CMCalxWhkkwoOPyk40DVsoBa6rm4KI0rB7uRtgPkDP0LYsauy6LL0yhLWB+yTj9EY5G/dd2wyMNFeWVUDcs1RXfFddkZ9cN4Ud0o1RZVcYCD/3lENGNobJPdZxSJgVjaUpaGB98Y1C',
 'tag': 'KPrEHalIulNtvHX6RIId3z4zfk8qKHMj0kxzhFIvW/JWd5LiyG69kdodHLz1QWPmVqGb525+sYcH1XhVXol5Y7zVBoi58qrKyQh3gC1lffnB+U5z+5u3uMAzupJ56vMrzCsSRiANvGrWlR57iCBy7Jhg3QTOYfDxBvt9G5N+yEX3vNTZmEMPYyn7u6lzuQ1xXllqiJXXQdi5TfMSLDyboez4mjsrF1elqpxGBeBFroyOVy3PjeLhHWvKAQr9zfiQSUOiVoUkQkw6zAS5eK4sgISagXhsBSLCL3fQmlevwDP+EnmqvwwP9iLv/jWGR8bojD7So94a8kNFuMHZY++wyp8FKreTpuaxYI9dayxQbLwJWdz9c9+x5oaL3dklb3lQJssAkdEYplsk9yTTaYZctv/wNyAHRKMlCqrKiFDNnlWq17CiJe7SHN3vPunPwuSIHgSi7iTz14CGvkzixGvFU+2nIfnCaN5WS0Ddhz7fBNpnMjhdfnFojg1n5Lrz5md6',
 'iv': 'r807Has0R4GbeCciSG1mWv9oSCpbx39f/zs8AZQhzjCXFBh075Po+J1TpQqwqkqIJ/t6B20FnNMgV9ZV/verIo+AdlsfPx6WLmYssPnbyagnJ/r4HZWe1z/kl6OQ/R4pVEgROt8wqNKeSTH8Sx8YUcb5b5+fjgfdLnm0QQJv8+lR5FBKYYqq8gbzY2DlAVjMKUxoet75T8erAc+0Wbh6Wn+jn3d3iysEl1wz4TEU7fkkZDQcn2kU9X0+rs4oPDNgM1qXfPwQNYWxMcf9NKewyluxpzsZGfLX0tnF6hlZpXOWaMI6rZhIsdhHJiARgxaWgPshYtK6VUb3uxJh3PbOoXCH7CFPpFYqM2wzSAtQ0RNslWTd2okD+74V4LRvhbR3ukjzUm7RAduL0uszcA1ohSxENeYB3t6mfW4Aj0hQ3k8PyxwU/FPOzJlOenvJ2lUY5tfCB0G2kPBi3M+9UZi36fKrlwpo/ruCubQW3X+nAcennEZZDhvKlFzePo0BpK40'
}
# コマンドラインで実行 スクリプトが暗号化されていることを確認
cat src/dist/decript.py
# Pyarmor 8.3.4 (trial), 000000, non-profits, 2023-08-21T16:53:11.917616
from pyarmor_runtime_000000 import __pyarmor__
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00|\x0f\x00\x00\x12\t\x04\x00\xabN\xcc\xf5EU\xdf\xef\x12\x1d\xe5\xdf\'z}\x80\x00\x00\x00\x00\x00\x00\x00\x00\xea\x11\xc0\xe3!I\xe5\x8a\x02P\xac\xcf\x0c\x8b4c\xd91R^-/\x18\x8fx\xd6\x14\xcb\xaci6\xe5\x039x\x0e\x85zp\xbe\xd7K\xebQd\x1c\x1c\xc3@\tao\xf07\x15`\x8aX\x0e\x98\x18}\x81\xf0!>\xb0)RF\xb9\x12o\xfd\x90\xed\xa2$\x07\x87\xef\xd5\xf4f*\xb8\x01h\xe7z\xff\xe0\xba\xd8!\'\x1b\x8d\x04\xf5\x1f\x91\xac\x11\xd8\x80m\x04\xd0\x8b\xde\xb1I\x98\\n\x8bx\x84\xe1\xd4\xce\xc2\x8c\x8d\nA]q,\x05L\x1d\xd5\xc5\x7f\xc9F_\xe1\x1d\n\xe4\x9c\xd3T_|\xe5\x06GB\xbf\x8a\x84\xd8\x0e4\x11>\x1a\x93`\x95\xba\x10a7\xad\xad\xe9\x87p\xc2\x95 w\xdbcd\x04\xa7\xbf?s\x94\xcfi\\@\xc8\x07.\xd7\xcaak\xd5\xceI\x16_\x17\x14\xcd\xc21=Yx>\xf4*}\xa7\xd9&\xcd\xb3E\x8f\xfb\xae\x8f5\x14j\xbe]\x895\xa9\xcd`\xc4\xde\x8c\x9fK\xd7ASh\x00\xf6\xa7\xb9\xec\xa94\xaa\x8aB\x1e\xb8\xe0Ay\x99\xddW\x9a\xf3\x80\x04\xd4\xd6x\xc3\xb0\x92\xc0e\x7f\x0e\xdd\xb3\xcf\x85\x18w3K\xee&\x0b\x17\xa8\xe8\x19\xb6\xa9\x0c\xb0:\x85Y\x8b?P\xa2\xfe\x94\x97\xe0d\x00\xfe\xd5|\x15d$f&\x1e\xbdY\x04\x10\x99tV\x1d*B+\xa2\xc1\x07\x00<\xb3\xed\xd9\x92\xa0\x9f\xe0\xa4\xf2Bz\x1cg\x9d\xdd\xb5\xe0l\x1a\xf9\xecq\xe2\xb45\xa5\x1c\xaeF\x99(\x05\xf7\x17\x8d\xfa\xed\xc6\x00\xaa\x08u\xa4\x99\xf8qe\xa0a\x9c\x9e\xc3~\xe5\xaf\x990\xafB\xa7\xe3\xb6bN[Gu\x07\xbf\xb1d\x95\xceu_@\x1b\xa9\xf2\xfc\xe7\xcaHR\xc7\xfc1\x00P\xce\x8ces\xd3\xde\xd0\xf0r%\x1e\xf1\x01\xb0^\x88N\x17"\xfe\xc1aP\xfe\xdb\xb2\x02y\xca\x84\xe8\xbc\x88\xf3\xe8v\xb5 9\xc3<\x07\xb8\xb0\x85:\xf8i\xee+\x0f\x07}m5ri\xb4w\xce\xfe\xf9\xb0\x1e6O\xf1\xaea\xfek\xdbQ\x07\x89\xfe\xc4\x00\xbd<\x99\x8c\x1d\xbb\x14\xfd\xe4N\x91\xaa\xbe\xe0\xb9\x94ofb\x11\xa7\x14\x996M\xb4{<\xf9Md\xf4\xacv\xe2\xff/\xfa\x80\xa74\xe4\xc3\xf6\xfc\xf6\xae1\t\xdf\x11\xe2O\xb7\xa58\x8c\xbe\xfd\xf0O}\x8eH\xfa$\'*E&\xefc\xd8\xcd\xe7\xd3\xf1\xd7\x18.\x9d\xa25\xe3\xd6\x99\xa1+\xf1\xd4\x94\xce7\xc7\x1c99\x9f\x1a\xb7\x84\xb5\x94A\x07\xe53\xcd\xcb\xc3\x044i\xa7\x8c)\xd83\x07-C\xe0\xb0Y\xca#\x8a\x07a?\x04,\xe032\x16\x91\x9c\n\xd2]\xcd5(&wx\xf7`w\x80\xd9_|\x97\xd1\x19\xc6\xeb\xf9C"\xf1\xc0~\xec\x8c\x9e5D\xd9%\xb6?\xa0\xe9.!\x86\x8cH\xe8\xb9\xff\x99\xdf\x02\xf0\x16\x19\x08;&\r\xf6\x05RE\xb0i\xd7`6\xfeM\x82@\xf9\x92Zd\xb8\xfb+<\x00Y\xbe*\xf6\xddx\x85\xaa\xf0u/\x89~N\xcf\xb2\xbd\x8a0O\xd3\x9d\xf9\x84\xab\xbb\x11W\x99.\x97cTgI\xa1VZ\xdc\x11o\xe2\x9b\x9d\xe9\xb3r\x98\x83\x92\xf3\x9f\xe9|\x0f\x15\xa7\xac\xd9+\x0f3\x1bL\x80E\xc3\x0e\x99\xa2\x0c\xf5\xffW.Ph\x99;$\xb4\xb91\xee\xc3,\x84\x11\xa3\x84\xee\xd0G\x10\xcfX\xb4\x0eP\x86\xcdnv\xe3\xdb\xb9\xbd6\x94\r\x81\xda\xa4\xd5\x8b\x8bj\xa8\xef\x95\x95\x12\xfa\xb5\xe9\xb2Q\x89r+?\x92\xfa\xee\x1d\xa5\xd7\xe1\x86\rG$\xf8mj\x10,\x07\x01`-\x82\xd3\xd0\x08\xd5\xaegJy\xd2)6\xb7\xadP\xaa\xa5\xa8\x8a\xcbOPi\x93"\xeb:\xea\xfbi7[P\x8b\xd0\x97)m\xc6\xd0_HU\xeb}\xc5\x04\x1a\xea\xe0v\x95\xc66\xf5\xd7\xfe\xecY"\x86\x93\xfb\xeb0c+\xa9\xc4$\x1e]OSg\x04B%-U\xf2\xa1\xbf\xbf^\x7fY1o\xe0\x1dsb^\x9ch\x1d\x19\xa1DB\x02u\nR\xc6\xeb\x8c\x02\xf3Z\xb8\xea\x89\xd7\xac\xa3\xe3\xec\x83\xc3\xbd\xffz\x8efJ\x11\xbc\x03\xca\x1a\x9c\xad\xdb\xb8\xaa{\xe9\x977\n\x15V\x9d\xa4\xdc\xbe\\\x1f\xc2h\x8a\xf4Z\xc4\x9bk\x8e\xb4\xaev?\xdbS~\x9a*\xd8\x0e\xbd\xaa7j\xba\x155F\x93\xd5\xe4\x81e\xc7\xc3\xf5\xcbav8\xf6J/l,\xa0. \xdd\xd5\xfb\x01t\xe2p3\xebN\x8a\x15\xc2\xe0o\x0b\x88\xa55F\x83v\x12k\tW\x93q%\x12\x8b>\xa1\x80\xc7\xb8\x08\x19X\x9f\xbay~\xd0"In(\xfc\xba\xa2 \x89B\x8f\xe7\xb5\xd9\x07\xca\xa1\x95n\x8b\xda\x1e8\xd8\xa9\xc65\xff\x7f\xb2I\xa5\xc4I)w\xeb~y\xc69\xe2\x8b(\xdah\xa0\\\xec\xcdO\xb0g\x93\x9b\xde\x90\x17#s\xab\xe69\x9a\x97\xfe.\x907G\xbf\xfc\xe59[Hb\xc9\x02UN\xfbf\xc96\xa0\x8b\xb5\xc0\xea\xc2\x8e\xfe w\xab\xb4)\xec\x1c\x88\xbb^w\x05v\xe9J%&\x98\x9d-\xfb.\xf7\xe8V\x1e\x02\xb0\x97\nR\x1a\x85+\xd9\xaaI\x07\xae\xb8\xe0\t\xf4#V6\xf00\xc8;\x8a\xd9\xe0n\xf0\x80\xf6\x83?*\xd4\xfd\xf7E\xe9\x13\xff\xab(\'~\x81\xd6\rsqFG\xcdV\xc8\xeeO\x98(\x06\xdd.\xa3=\xfd\x85\x86\x02\xb4\xfbwk2\xa8\xfd\xc4b\xbe;V\xbc@\xcck\xe0\xe7\xf7\xfa\x92\xea\x97bd8\x97\x01/\xccgy\x03F\xd1\xfe\x86|q\xae\xe8\x91\rcO\x93R\xf3\xd5\xb3\xf0\xb8\x10NE\xa8\xf3\xe6\xff\x82n\x90\xaa\xc9\xb9\xaaO#\x86;\xe0\xb70\x9b\xff9\xd8\xf9\xc6\xf4</y\x8c\xbc\x84\x13j\xa8\xd1f\x9f\xa3\x9bL\x88_\x9e\xbf\xc8b\xa5T\x7f\x80\x91f\x15\x15\xe5Nw\xc3\xb9hM\xc9,YM\xda\xe3K\x14\x8e\xbfow\x0e\x9d?\x90\x9d\x9f\x9cH\x05\xba\xfa:\xe8\n%\x9aH\xae\xf9\xab~4\\w.\xd4%\x8b\xba\x99\xef\xe5^\xbb\xc8\x80\x89a\xb2\xd1\xe6v\x07M\x87\xcb\r\x0b\xebT\xa7\xf9\xdfE`\xaa\xeb\x82\x8b\xfcE,>\xd2v\xfa\x02j\xdet\x99\xc7\xfd\xdaj.i\xd2\x12\xb1\xbf_\x0f\x8a\x9e\x0f^\xe7!4F\x12\xa3Q\xb3Z\xaf\x90\xec\xcf\x1c\xa4\x8ad\xa4\x80\xd1\xda\xeb\xc52\xb3\x85\xdb\x8d\xe4x\x80\x84|%\x17>o\xbf]\xb2\x9d?\x03ZX\xac\x1b\x1ct\n\xfb\xab%\xd3V\xa5i0\xf4-\xe3g\xc4\xddb\xd3or.\xf1yn\x08\x04\xbe\xbc\xdf\x9f\xd5\xa2\xb24\xe7\x9b\x86\xff\xa8\x1b2!\xaa\xa1DU\xc5\xd06~&i.\xfbB\x0e6\xee\xf5\x12\x03\x05\xe1\x8f\r\xb2\xd2\xa0E_oaD/YQ\xc2J\x1a\x8f\x80\x1d\x1f\t\xe9#L\x13j\x92P\\\n\xe45\xda\x97P\xba\xab\xaf\x8ek\xdb\xa5\x12\x8e\x82\x9a$P\xa9\xab\x15\x99\x8c7s\xf0oY\xd3\x89@\x1b\xf2\xfa\xa0M\x8f\xacTY\xe1\xb0L\'}C\x84\xb0\xf4qn\xe3\xe2\xf8\xd7[A\x03\xa0\xc6f\xf3\xe2\xec\x1e\x93v\xc7\x7f\xfa\xb0Q\xa1\x9e\xe7I.\x14\x9d/5\xb1i\x02>\xda\x1c\xdb\xea\x01\xe7\xfb\xa3\x16\x13\xa7\xfe\xae\xb1\xeb;\xe5n\xea\xc0\x18W\x820\xb09\xa40\xb5\xf4\xae\xdc[[\xcb\x81\x80\x93\xe2\xab\xa8?\x08\n\xf1\x948\xb9\xba\xd5\xccI\x884\x01*\xa5\x98=\xe0\x1a\x18\xf9\x8b\x1f<\x8bbx\xddI\xd7!\xfe\xcc\x8c\xf3\xb2{U\x17;\x13\xbd\xc6\xd6.(\xe2%{Nn\x87S\xb6\x9e_\xedL\tW\xe4%\x9fg\xfd7\xba\x81\xafq\xa8[yt\xa6\xc4\xb7~S\xa4\x0b-f\x99\x13\xb9\xe5\xe1M\xd5&\xef\r\xf4\x18wy\x8b\xa3\xe1\x91\x90\xa9M\rW\x11Zi\x0e\xba\x17\xb8\xc5\xe1\xf3\x1cY)\xa2\xfa\xfar\xe7\xd4\xebT\xe4\xbd\xab\x05x2\xcf\x7f\x0cM\xcdo\xbc\xcfA\x13\xabh\xf1\x95\x13A\xa1\xdb\x03\xe1\xddr\'B\x94.?}q\xaaYL\xe8\xd9\xf7\x7fa\x9b\xdb5\xe8X\x92X\xc4\x97d\x8c@nN/\x7f\xe9\xf9\x11\xc7\xd6}\xa8JGN\t\x91\x804S\xe8\x13\xf2\xcb\xd2/%\x17[\xfc\x84\x18l\x0c\xc916}\xea\x1d>E\x87qA\xc0\xcc\x03\xad7\xed\x08\xbbn\xf1\xf2^\xf2\xc39\xee\xacp\xc9\xc0\xeccn\xc3\xa2\x9e[\\\x8c\xb1\xf4\x0f\x03|\xed\xc3|z\x99b\x9bQ\xa3v\x0f\xd1$3E\t\x8f\x1a\xa06-\xa7}\xde\xfd\x94\xc5PgRA\xc9!\xbeH\xddk\xbcl\xdf\x91f\xb75I=\xe2\xe3\xf1\x9c\x0c\x18\xb4d\xf6\xfch\xbc\x91\x00\xfax\xef\xcas\x95\xbc\xe4\x91\xed\xb1}\xf5\xc9h\t6\x158h\xa3\x80\x14\xe0N\xb5\x04\xa2\xee\xe8\nB\xe1\xf4\x9c\x11y\xf7\x9dM\xe3\xee\x9b\x0b\x07[\x1d3\xbbt`\xc01\x13\xa5|\x16\xba\xab\xe6\xf6\x0b\x88\x91e\xd6\xc3\xd9\x00\x02\x17L3\x83+m\xa3\xb2U\xeex\xd5\x8c;\xa81q\xb08\xed\xfd}m-\x14(\x01\xe3\t\xe8\xe5\x91\x9e\xbb\x06\x9d\xc0[@n\xb3\x86\xe7>\x9bB\x95Y^\x91\x8a\xaa\x97\xae\x9ce\xee\x0f\x0f\x16.\xddC\xacI\xd6,+\x14\xac\xa3\xb9:p\xf2\x80\xb2tK6\x93\xc0=)\xe6\x82\xab\x9aE\x98\xb5\x89\xc2\xed\x16~\xa2^\xd0\xfb\xc8\x98\xd3\xb6\xc8of[W3\x97\x9dO%{C#\x1b\x94\x8a<\xf7=\xfa\xe7\x92\x1fI\x98\xfbT\x03\xf9\xe3\xa71\x81\xcc\xecf\xb6\x8bH\xb5f\xa1\x86H?\xf1\xbf2\x86-}\xd2\x1ax\xbd,\x13,\xd3\x1c\xf4.\xc8\x93\x9fLt;/Ab\x91\xa4\xeb\xe5-_\xa8jI\xc7O/\x00\xe2\x99\xfc\x8f\xd9\\\xa8g\xcf\x86\xa8mQ\xc8EM\'JB\xa9\x94\x8a\xb3\x8b\x90L\xf3\x1b\x7f\xaaZ\xe6t\xd1\x8c\x18\xe8V\xdf\xa6\x1e\xde\xc8\xdbM\xee\xcd\xcc)9,|*\xfe\xa1\xc8!\'\x8e\x10\xc0\xb9\x81\x8c\n\x88l<\x14\xdc\x9dr@\x86\xa8\xcd\xdb$\xc1\xf4\xe7\xb2Fwv\xb4v??\x89\xbdf\xd3\xacC\x10\x00v\xd2)\x8b\xfb\xd78\x04,\xd0sI\xd9\x94Zx\xd4\x16\xa9\x8b\x18p]\xb7\xc9v\xd2\x9f rsB"\x0b\xf4!\x17i\xca\x8e\xb4\xe39\x80\x1b\xc2\xa0\t\xde \xcc\xb8\xf5\xa2a\x81p\xfe\xc16\xad\x89\x1f\xb9\xf9\xbd]\x16\xe41S\xf8\x92r)5dM+;g: 9\x1a@\xd4\x00w\xf0\x13^\xc3\x86)\x08\xdf\'\x1b\xedW\xf2<\xd2\r\xbcT\x14g\xe5\x86X"\x9b;P\x1d\xa3G\xdd*PaU*yd\x84\x1e\xaap\xf2\x01\x1a\x84\xe6\x1e\xa4\x95\xa7\xa3Pc\x8c\x048\xa4~\xd4\xb3{T\x17DQ\xbd\xfd\xbf\x88\xff+u\x86jb\r\x87\xb0;\xc2\xe6T-\x18\x94o>6\xf1\xa4N\x9aJ\xd2\x00^\xf3\xe0Z<$\xf9\x1b&\x87L\x0634R\xcc\xd0U\x11\xaf\xedl\x05\xce%\xafE\xae\xe5\xca\xdd\x08\x18c\x04\xae#E\xfd\x1a\x98\x91\xe7k\xcc\xb7\x1b_Ca\xfei\x15\xfe\xb3\x82\x05\xb9\x12N\x89*\x84\xbfb\xf2,\x08\xeb\x99.u\xff\xb5C\x87\x05\xf9df\x17\xe3\xf5\xf2\xe2\x11\xa6\xf0n"\xe5\xfd\xce\xf9\xe3\xef\x90@u\xa9\'\x89\xab\x89\x0f\xc8(\x94\x80ni+\x97\xce\xfc\xe0`\x0b\x91\xa1}\xcaq=\x82W\xe6\x94\xa8\xda!Q3\x8c*\xf1\xde\xc1\xe5\xceM\x85\x13\x01)\xa4e.m\xf5\x10/\x84S\xaa\xbe\x82xq\x1e\x13\x81\xfe\x07\xea\x19\x82\x94\'/\xa2\x9d\x95\xf1\x02\xf3",\xe4\xf4^\xc1\xbb\x86\xdc\xbb\xf7\xda\xf4yZY\xd8\xd6\xfc\xfc#\xd9"\x0c\x1f\xad\x12|w\x14)\xb2q,\xeeH\x86\xdf\xe1\xcb\x0c\x0f\xe2\x133,B\xd5\x10\xc1\xe5\xa6\xf3m\xf7g\xd6\xd1S\xf7\x0b\x86\x8a%jo\x85\xb1dr\xa8ru;\xd3>\x8b\x06\xdft\x105\xf3R\xc7\xc5\xaf+\x08\xa5\x80>;\x90\x97\xad\x9e\xbd\x12\x8bR1\x03\xc1Zp\x86[">v>\x18\x1d\x1b\x1a\xc7e\xbdM\xac5\xdd\xa2Jjp\xe0<@\x10\n-\x8e\xc4\xdf\x87DL\xaf\x1f\xb6e\x8a`\x12\xe5\x94\xf2^pi\x82\xb5v\x97\xc4\xc6\xcav\x9a40\xb8u\xe1\xed\xf3W~>\xa5S\x7f\x87KF\xa8\xab\xf5l\x7f\xb4\xa9\xec\xe1@\xdc\xe1\xf3;\t\x9a@V\x16h-Y\xf64/\xba9\xdb\xb3\xf0X\xd1q\x9e9h5\x03\x03\xb1\x89\x83\xd4\xbbt\xab\x15\xb8N\x0b\x13\xfe#\xc9t~\xdd\xa8\x93WJ\xa5\xf5o\xe5V\x12\xce\x87l\xa0\xeb\xf5 o_\xdf\xbe\xda\x7fd\xf6\xbe\r\xd7\x95\xc6\xd94\xd3\xe6\xde\x01E\xc3QC\xb8\x90B\x8d\x0b\xd6\xd5\x19\x06\xfb\x0c\n\xbb\xc6&\x12\x18\x90U\xc0\xe7\xfc\xb0\xf1o\xbb\x13\xbe\xb2\xa2\xad\x14\x96<wr\xbcS\x17\xb0N\xe5\x98\x01:\x07eB \x0f\x93c\x80V=\x08\xf1/\x1c\xc2\xc0h\xca\xd3\xbe~kd\xd3\x9er]\xe5\x8b\x7f\x83Q\x80\xdc\xc0o\xe9\x92)\x95H\x8a\x94\xafv\xcb\xfeO7J[O\x92\x1d\x97E\x02\xd4\xc3\x83\xfe\x08\xa2\x86\xd8\xc2\x8f7\xda\xdb\x85]w\x00\xf5\x85xz!\x93\xa8\xf4\xb8\xa9\x9bf\xeb\xb4\xcb\x16_\xab\x10^\x96\xe2\r\xd3\xb5\xa6\x84\x1f\'\x8f($:\x1a\xdb\t.\x06\xda@\x00g\xa6\xf0W\x07\xb3\xc9\xbe\\`~\xd1\xedV\x9c\x04^,\xe8\xce\xae\x85\xa2\xe3yP\xf7\x9d\xe5\x1di\xdb6\x96\x11,\xb5N\xb3R;\xa8*\x94a\xe2y\x05={7q\x05P\xb2\x84\xc0\xd5\xfa\xca4\xbb\xc5,\xe8\xf4%\xfd\xf80\x89>\x8d\xaa\xbe\xc3{\x8ejY\x05\x93\x1b\xdfF\xf6\xe7\xee\x16\x0e\xb0\x7f\xd9\x9eu^+"\x1c8}\x7f\xa7(\xba\xde\x81c\x85j\xec\xb1v(z\xd8\x01\x9d\xf5\xb7.\xb7$\t\x9f\x866\xf2]\xb6\xef\xea\xae\xfb]\xd4d\x15\'\xe5p\xa6\xadyUr\xf6\xff\x9a\x01\xb5\xf1\x8f\xb8\xac\xfd\xc3\x8fR%nw\xa1\xe1c\xc9\xfa\xdd?\t\x84\xc1%\xa0L\x9f\x8c*/\xd8\xfb0\xae\x975=\xd4m\x85)\xb9\xa9\xf9\xc4[p\'\x02\\\xd5\x8e\xd7\xb8E\x12\xf7L\x14+\xe23\xa3\xb9\xd2\xe9\x91x\x94x\x1fqK\x82\xb9\x7f`\x16B\xa4\xa5\xac\xcb\x1f\x05\x19\x8a\xa7\x81g\xf1\xa8\rH5\xde\x05C\xc2pP\x1b]\x03|W\x93}\x92\xcb\xc3\xa7\x99\xa6\xc2~|\xefGLQ[=\xb2E\x9f\x88#k\n\xfbXV\x14E\x8a\xcaPxK\x89\xd6\xcb\xb5\xc8\x8cBg\xeaoQy\xea\xd7\xc8\x02\xd4\x14\x9a)\xf2\x13~ lV\x9a-\xf5\x1a )o\xf5&\x7ff\x95\xe8:~\xc3\x1bU\xfe^P4\x9c\x900\x94r\xb2a\xaaQj\xb1\xa1lt\xc8F\x0e\xc0#\x80\xbfW\x1a\x91\x02>i\x14\xe9\xbb^\x8c\x15\xfd8B\x00\x125)\rm\x91\xacM\x1b=\x19\xb5\x95\x9f;\xaf\x84+qg\x10R\xef\x8b\xc1 \xa6\x80\x81\x12j\x02\xbd\x166\xa2Z\x8b\xc3\xfdU\xfe\xaa\x9e\xa1\xd19\x08\x95\xce\xf2\x1bW\'\xa4\x97\xca\x94\x15\x80\x08#\xeb\x1b\xc3\xd5\xd6\xec\x92\xdaG-/\xbb\x08\x14\xe8Q(J\x97\xfc\xa4L\xde\x9e\x17\xd9>D$\x1b2\x84\xdbh\x1c.\xf8\xf5r\xf1\x83\x16{T#PO+&\xcbz\xb6\xcd\x93E\xe4\xffx\xca\xf3\x07C\x8d\xb6;,q\x10\xc2\xb9\x9f\x96\xe7N\xda\xb7\x8a~\x87\xe0\xf9\xfd\xb4\xe2\x14 \xdb\xd3hT>\x19\x82W\xd4e+\x9b\xb2W~Dh\xb5|\xe1&\x8eR}W\xf2\x07\x90\xa1\xe1\x188\x87\r\xf9\x97\xd3r\xc0\x88\x11/S\xf3\x02\xb2\xac;\xf2\xb7\xb9l\x04\x03\tV\xb7.o\xe6\x93Dc^\x1e\x89\x08\x059DK\xb3V\x14\xf6a@9\x92j\xe4\'\x07+\xdcJ\xc2>\xf5\xabMK2\xd2\x0c@\xd2<\x93\xe7\xb1\x13he s\x0c\x130+\xbd\x82\xb2\xcd\xab\xaf6\xa2\xf0k\xed;X\x80|\xd3\xdc\n8\x8c\x9b"-\x0e5\xf3\xed\xea\xdcR\xffD\n\xcdT\x1cFCh=#\xc3x\x1d\xf9\xcdmY0\xbe\xca\n\x99,\xc3\xf2@\xa6\x03/BZ`\xfdgQO\xee#\xd3f\x94\xa8\xc8\'\x84+\x01AJ7>\x8e\xe0')

# コマンドラインで実行
python src/dist/decript.py {cipher_dict["text"]} {cipher_dict["key"]} {cipher_dict["tag"]} {cipher_dict["iv"]} 
plaintext =>  new password for pyarmor

Colabではスクリプト中のテキストを変更したり実業務のデータに合わせて条件を変更して試すことができます。


この記事が気に入ったらサポートをしてみませんか?