質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

12083閲覧

No module named 'Crypto'エラーが出る

mikeko0901

総合スコア227

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/05 14:19

python初心者です。
API連携をしたく、キーをハッシュ化していますが、
ターミナルでファイルを実行すると

File "test.py", line 12, in <module> from Crypto.Hash import CMAC ModuleNotFoundError: No module named 'Crypto'

というエラーが出ます。

$ php list
をした結果は以下ですが、pycryptoもpycryptodomeも入っているのですが
なぜこのようなエラーが出るのかわかりません…
※php listの結果(一部略)

parso 0.1.1 pbr 5.5.1 Pillow 2.0.0 pip 20.2.2 ply 3.4 policycoreutils-default-encoding 0.1 pyasn1 0.4.8 pycparser 2.14 pycrypto 2.6.1 pycryptodome 3.10.1 pycurl 7.19.0 pygpgme 0.3 pyliblzma 0.5.3 pylint 1.8.1 pylint-django 0.8.0 pylint-flask 0.5 pylint-plugin-utils 0.6 pystache 0.5.3 python-daemon 1.6 python-dateutil 2.8.1 pytz 2020.5 pyxattr 0.5.1 PyYAML 5.3.1 repoze.lru 0.4 requests 2.6.0 rpm-python 4.11.3 rsa 4.5

どうすればよいか、アドバイスをいただけますと幸いです。
開発環境:cloud9
Python 3.7.10

【参考】API連携の部分のテストコード test.py

import base64 sk = '*****' sk_bytes = base64.b64decode(sk) secret_key_hex = sk_bytes[1:17].hex() print(secret_key_hex) import datetime, base64, requests, json from Crypto.Hash import CMAC from Crypto.Cipher import AES sesame_id = '*****' api_key = '*****' cmd = 83 #Open history = 'test5' base64_history = base64.b64encode(bytes(history, 'utf-8')).decode() print(base64_history) headers = {'x-api-key': api_key} cmac = CMAC.new(bytes.fromhex(secret_key_hex), ciphermod=AES) ts = int(datetime.datetime.now().timestamp()) message = ts.to_bytes(4, byteorder='little') message = message.hex()[2:8] cmac = CMAC.new(bytes.fromhex(secret_key_hex), ciphermod=AES) cmac.update(bytes.fromhex(message)) sign = cmac.hexdigest() url = f'https://app.candyhouse.co/api/sesame2/{sesame_id}/cmd' body = { 'cmd': cmd, 'history': base64_history, 'sign': sign } res = requests.post(url, json.dumps(body), headers=headers) print(res.status_code, res.text)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cx20

2021/09/05 17:21

タイプミスかと思いますが。。 誤)php list 正)pip list
guest

回答1

0

ベストアンサー

pycryptoもpycryptodomeも入っている

pycrypto は開発終了していて推奨されていないようですので、アンインストールしてみては如何でしょうか?

pip uninstall pycrypto

<参考>
■ 【Python暗号化】pycryptoではなくpycryptodomeを使う
https://self-development.info//【python暗号化】pycryptoではなくpycryptodomeを使う/

投稿2021/09/05 17:27

cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikeko0901

2021/09/06 00:38

ありがとうございます。 python3のpipのインストールが python -m pip install pycryptodome らしく、上記打ちましたらNo module named 'Crypto'のエラーが消えました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問