でっちあげました。
>>> from Crypto.Cipher import AES
>>> import hashlib
>>> import base64
>>>
>>> C = "Nzk1MTkxZDc0ZmYzY2ZjNjdlNTQ4MDQwNjJlMDE4MTY="
>>>
>>> K = hashlib.sha1(b'piyo').hexdigest()
>>> Key = bytes.fromhex(K[:32])
>>>
>>> aes = AES.new(Key, AES.MODE_ECB)
>>>
>>>
>>> aes = AES.new(Key, AES.MODE_ECB)
>>> dec = unpad(aes.decrypt(bytes.fromhex(base64.b64decode(C).decode())), 16).decode()
>>> print(dec)
hoge
以下は関係ないので忘れてください。
暗号について、少し調べてみました。
AESはブロック暗号でブロック長は128ビット=16バイトです。
したがって暗号化されたデータは16バイトの整数倍になります。
python
1>>> C = "Nzk1MTkxZDc0ZmYzY2ZjNjdlNTQ4MDQwNjJlMDE4MTY="
2>>> len(C)
344
ですので、CはAES暗号化されたデータではないようです。
暗号化と復号化の例を作ってみましたので、これを見て考えてください。
python
1from Crypto.Cipher import AES
2import hashlib
3import base64
4from Crypto.Util.Padding import pad, unpad
5
6K = hashlib.sha1(b'piyo').hexdigest()
7Key = bytes.fromhex(K[:32])
8
9aes = AES.new(Key, AES.MODE_ECB)
10
11
12BLOCK_SIZE = 16
13src_s = '吾輩は猫である。名前はまだ無い。 どこで生れたかとんと 見当 がつかぬ。'
14print(len(src_s))
15src_encode = src_s.encode('utf-8')
16print(src_encode)
17print(len(src_encode))
18src_encode_b64 = base64.b64encode(src_encode)
19print(src_encode_b64)
20print(len(src_encode_b64))
21src_encode_b64_aes = aes.encrypt(pad(src_encode_b64, BLOCK_SIZE))
22print(src_encode_b64_aes)
23print(len(src_encode_b64_aes))
24tgt_encode_b64 = aes.decrypt(src_encode_b64_aes)
25print(tgt_encode_b64)
26print(len(tgt_encode_b64))
27tgt_encode = base64.b64decode(tgt_encode_b64)
28print(tgt_encode)
29print(len(tgt_encode))
30tgt_s = tgt_encode.decode('utf-8')
31print(tgt_s)
実行結果
python
1>>> src_s = '吾輩は猫である。名前はまだ無い。 どこで生れたかとんと 見当 がつかぬ。'
2>>> print(len(src_s))
336
4>>> src_encode = src_s.encode('utf-8')
5>>> print(src_encode)
6b'\xe5\x90\xbe\xe8\xbc\xa9\xe3\x81\xaf\xe7\x8c\xab\xe3\x81\xa7\xe3\x81\x82\xe3\x82\x8b\xe3\x80\x82\xe5\x90\x8d\xe5\x89\x8d\xe3\x81\xaf\xe3\x81\xbe\xe3\x81\xa0\xe7\x84\xa1\xe3\x81\x84\xe3\x80\x82 \xe3\x81\xa9\xe3\x81\x93\xe3\x81\xa7\xe7\x94\x9f\xe3\x82\x8c\xe3\x81\x9f\xe3\x81\x8b\xe3\x81\xa8\xe3\x82\x93\xe3\x81\xa8 \xe8\xa6\x8b\xe5\xbd\x93 \xe3\x81\x8c\xe3\x81\xa4\xe3\x81\x8b\xe3\x81\xac\xe3\x80\x82'
7>>> print(len(src_encode))
8102
9>>> src_encode_b64 = base64.b64encode(src_encode)
10>>> print(src_encode_b64)
11b'5ZC+6Lyp44Gv54yr44Gn44GC44KL44CC5ZCN5YmN44Gv44G+44Gg54Sh44GE44CCIOOBqeOBk+OBp+eUn+OCjOOBn+OBi+OBqOOCk+OBqCDopovlvZMg44GM44Gk44GL44Gs44CC'
12>>> print(len(src_encode_b64))
13136
14>>> src_encode_b64_aes = aes.encrypt(pad(src_encode_b64, BLOCK_SIZE))
15>>> print(src_encode_b64_aes)
16b'lW7n\x91\t\xd3\xcaR\x04\x8a\xd6Vr_\xb6\xea\x04\x91\xa7\xb6\xfeV\x8b3\x11\x94\xdf\x0f\nyT\xd4#\xa7\x96C\xb4\xe3P\x92\x9c\xaf\xe6Ol\x95P\x8a\xcbK\xac\xaf{#_\x8c\x16\x99\x89N,\xb2\x06\x8e\xe4<Y\xbe\xa3w,\x0f\x8b\xc8\x0c\x17F \xca\t\x11:\xc5{Nx56C\xef.\xcc\xfb\xbcr\xd81\xe9a\xb7X\x93\xa9`\xcd\'\x1b0a\x1a\x17\x7f\x94\xa3S\x1a\x12M\xaa\xb9\xc0\xfe\xfd\x8c\xe4\x7f\xc9\xbe\x1d AYB.\x8a\xe71\xb5Mj"t\xfd'
17>>> print(len(src_encode_b64_aes))
18144
19>>> tgt_encode_b64 = aes.decrypt(src_encode_b64_aes)
20>>> print(tgt_encode_b64)
21b'5ZC+6Lyp44Gv54yr44Gn44GC44KL44CC5ZCN5YmN44Gv44G+44Gg54Sh44GE44CCIOOBqeOBk+OBp+eUn+OCjOOBn+OBi+OBqOOCk+OBqCDopovlvZMg44GM44Gk44GL44Gs44CC\x08\x08\x08\x08\x08\x08\x08\x08'
22>>> print(len(tgt_encode_b64))
23144
24>>> tgt_encode = base64.b64decode(tgt_encode_b64)
25>>> print(tgt_encode)
26b'\xe5\x90\xbe\xe8\xbc\xa9\xe3\x81\xaf\xe7\x8c\xab\xe3\x81\xa7\xe3\x81\x82\xe3\x82\x8b\xe3\x80\x82\xe5\x90\x8d\xe5\x89\x8d\xe3\x81\xaf\xe3\x81\xbe\xe3\x81\xa0\xe7\x84\xa1\xe3\x81\x84\xe3\x80\x82 \xe3\x81\xa9\xe3\x81\x93\xe3\x81\xa7\xe7\x94\x9f\xe3\x82\x8c\xe3\x81\x9f\xe3\x81\x8b\xe3\x81\xa8\xe3\x82\x93\xe3\x81\xa8 \xe8\xa6\x8b\xe5\xbd\x93 \xe3\x81\x8c\xe3\x81\xa4\xe3\x81\x8b\xe3\x81\xac\xe3\x80\x82'
27>>> print(len(tgt_encode))
28102
29>>> tgt_s = tgt_encode.decode('utf-8')
30>>> print(tgt_s)
31吾輩は猫である。名前はまだ無い。 どこで生れたかとんと 見当 がつかぬ。