やりたいこと
pythonでのAES暗号化をおこないたいので、サンプルコードを書いて実験しているところです。
環境
win10 64bit
python3.6.1
pycryptodome==3.8.2
やったこと
コード
python
1 from Crypto import Random 2 import base64 3 from Crypto.Cipher import AES 4 5 def _pad(s): 6 bs = 32 7 return s + (bs - len(s) % bs) * chr(bs - len(s) % bs) 8 9 def my_encrypt(text,key): 10 text = _pad(text) 11 iv = "xxxxxyyyyyzzzzz0".encode("utf-8") 12 # iv = Random.new().read(AES.block_size) としても結果は同じ。 13 cipher = AES.new(key,AES.MODE_CBC,iv) 14 return base64.b64encode(iv + cipher.encrypt(text)) 15
実行結果
python
1Traceback (most recent call last): 2 File "----MYPATH----\sandbox\aes実験.py", line 108, in <module> 3 print(my_encrypt("abcde",pass_phrase)) 4 File "----MYPATH----\sandbox\aes実験.py", line 105, in my_encrypt 5 cipher = AES.new(key,AES.MODE_CBC,initial_vector) 6 File "----MYPATH----\venv\lib\site-packages\Crypto\Cipher\AES.py", line 232, in new 7 return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs) 8 File "----MYPATH----\venv\lib\site-packages\Crypto\Cipher\__init__.py", line 79, in _create_cipher 9 return modes[mode](factory, **kwargs) 10 File "----MYPATH----\venv\lib\site-packages\Crypto\Cipher\_mode_cbc.py", line 274, in _create_cbc_cipher 11 cipher_state = factory._create_base_cipher(kwargs) 12 File "----MYPATH----\venv\lib\site-packages\Crypto\Cipher\AES.py", line 103, in _create_base_cipher 13 result = start_operation(c_uint8_ptr(key), 14 File "----MYPATH----\venv\lib\site-packages\Crypto\Util\_raw_api.py", line 235, in c_uint8_ptr 15 raise TypeError("Object type %s cannot be passed to C code" % type(data)) 16TypeError: Object type <class 'str'> cannot be passed to C code
調査内容
pycrypto は非推奨であり、pycryptodome
が推奨であるということは把握しています。
pip freeze => pycryptodome==3.8.2
が出ています。
上記のエラーは iv として、非バイト文字列を渡した際に生じるエラーとして指摘されていました。
https://ja.stackoverflow.com/questions/48764/pycrypto%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B
以上より、iv がバイト文字列でなくてはならないことは把握しており、
上記コードではそこもクリアできているつもりです。
質問
以上のような状況ですが、なぜこのようなエラーになってしまうのか理解できておりません。
ご指導よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/10/17 12:23