私は暗号化機能(少なくともaesとrsa)を必要とするpython 3でプログラムを書いています。2.x バージョンでのみ動作するように見えるPyCryptoを見つけました。
Python 3 で使用できる優れたツールはありますか、それとも Python 2 (またはその他のソリューション) と互換性があるようにプログラムの翻訳を開始する必要がありますか?
ありがとうございました
以下で説明するように更新すると、PyCrypto が py3k で利用できるようになりました
私は暗号化機能(少なくともaesとrsa)を必要とするpython 3でプログラムを書いています。2.x バージョンでのみ動作するように見えるPyCryptoを見つけました。
Python 3 で使用できる優れたツールはありますか、それとも Python 2 (またはその他のソリューション) と互換性があるようにプログラムの翻訳を開始する必要がありますか?
ありがとうございました
以下で説明するように更新すると、PyCrypto が py3k で利用できるようになりました
PyCrypto 2.4.1 以降は Python 3.x で動作するようになりました ( changelog diffを参照)。
Crytographic Libraries はほとんどが数値計算であり、なぜ py3k バージョンがまだ利用できないのかわかりません。
アルゴリズムのテキストに従って実装されたプログラムを開発しているだけなので、注意して使用してください。(つまり、元の python2 バージョンの厳密さはわかりません)。また、それらはすべて純粋な python ライブラリであり、C 拡張を使用して記述されたものよりも遅くなります (おそらく、それが py3k バージョンが遅れている理由です)。
Python 3 自体はプライムタイムの準備ができていますが、それをサポートするライブラリがないことが障害になっています。もちろん、あなたができる最善のことは、PyCrypto を Python 3 に移植するのを助けることですが、おそらく完全に自明ではない C 拡張モジュールがたくさんあり、数日かかると思います。現在のメンテナが移植に興味を持っているか、すでに途中である場合は、彼に連絡して尋ねる必要があります。
Python で書かれた rsa モジュールがありますが、これはかなりクリーンで簡単に移植できるコードを持っているように見えますが、aes の場合は PyCrypto が使用するモジュールのようです。そのため、代わりに Python 2 でソフトウェアを実行する方がおそらく簡単です。
Python 3 で暗号化と復号化を提供するラッパー ライブラリsimple-cryptを作成し、作業を pycrypto に委任しました。
これを pycrypto より直接使用する利点は次のとおりです。
はるかにシンプルなインターフェース:
data = encrypt(password, text)
text = decrypt(password, data).decode('utf8')
パスフレーズの使用をより安全にするキー拡張
データの変更をチェックするための hmac の使用
Python 3に移行すると、実装をGoogleのkeyczarに切り替えることができるバージョン管理されたヘッダー(より適切に維持する必要があるため-明らかに必要性からこれを書いただけです)。
次を使用してパッケージをインストールできます。
easy_install simple_crypt
プロジェクトのgithub ページで詳細情報を入手できます。
私の LibTomCrypt の Python ラッパーは Python 3 をサポートするようになり、AES と RSA の両方を備えています。
(バージョンに関係なく) Python 用の適切な暗号化ライブラリを認識していません。私が知っていること(pycryptoを含む)はすべておもちゃです。本格的なアプリケーションを実装したい場合は、m2crypto などの実際のライブラリへのラッパーを探す必要があります。Pycrypto 自体は多くの標準に従っています。特に、RSA では安全を確保するために適切なパディング スキームが必要です。pycrypto は少なくとも現在パディングを使用していないため、その RSA 実装は安全性が低く、他の暗号ライブラリとの互換性がありません。
Martins の質問への回答: 明らかに、この質問には多くの意見があります。1 つの提案は、Python の代わりに Java を使用することです。Java には明確に定義された暗号化インターフェースがあり、インターフェースを実装するさまざまなプロバイダーがあります。これには、プロバイダーに依存しないソリューションを実装できるという大きな利点があるため、異なるプロバイダー間で簡単に切り替えることができます。個人的にはopensslが好きなのですが、かなり使いにくいことは承知しております。
pycrypto には Py3k ブランチがあります ( https://github.com/dlitz/pycrypto/tree/py3k内)