問題タブ [pycrypto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 暗号鍵を安全に保管する方法は?
PythonWebアプリケーションデータベースのフィールドを暗号化/復号化するためにpycryptoなどの暗号化ライブラリを使用することを検討しています。ただし、暗号化アルゴリズムにはキーが必要です。ソースに暗号化されていないキーがある場合、サーバーのようにdbフィールドの暗号化を試みるのはばかげているようです。誰かがdbファイルにアクセスできる場合、Pythonソースコードにもアクセスできます。
使用するキーを保護するためのベストプラクティスの方法はありますか?または、dbフィールドを暗号化する別の方法(dbレベルではなくアプリケーションで)?
更新:私が保護しようとしているフィールドはoauthトークンです。
更新:これを回避する一般的な方法はないと思います。dbファイルがバックアップされて移動される可能性があるため、とにかくフィールドを暗号化する必要があると思います。少なくとも、問題を1つの脆弱な場所(ソースコードの表示)に減らします。
更新:ユーザーがオフラインのときにAPI呼び出しにoauthトークンを使用する必要があるため、この場合、パスワードをキーとして使用することは適切ではありません。
python - pycrypto 2.0.1 で保存された RSA 公開鍵を新しいバージョンにインポートする
PyCrypto 2.0.1 を使用して生成された、ピクルス化された RSA 公開鍵があります。PyCrypto 2.5 を使用するようにアプリケーションをアップグレードしようとしています。
ピクル キー データは iCrypto.PublicKey.RSA\nRSAobj_c で始まります
残念ながら、PyCrypto >=2.1 では RSAobj_c が削除されているため、デピクリングは失敗します。
キーを新しい PyCrypto と互換性を持たせるにはどうすればよいですか?
python - pycrypto と python 2.4.3 の問題
私はプロジェクトに取り組んでいますが、雇用主から提供された cPanel にはpython 2.4.3
(バージョンが古すぎます) があります。問題は、使用する必要があることpycrypto
です。だから私はインポートしてSHA256
います。問題はここにあります SHA256.py:
hashlib
Python 2.4.3 では使用できないため、インポートしまし_SHA256
たが、フォルダーに _SHA256 がありませんCryto.Hash
。これはpycryptoのバグですか?または、このモジュールを python 2.4.3 に使用できませんか?? この問題の回避策はありますか?
python - ネストされたインポート エラー
実行中python version 2.4.3
。私はpython-amazon-product-apiを使用しています。ただしapi.py
、次のコード行で問題が発生しています。
私のバージョンは 2.4.3 であるため、に移動しelse
てインポートしようとしCrypto
ます。だから私はそれをダウンロードしましたが、 SHA256.py でインポートエラーが発生しましcannot import _SHA256
た。ライブラリに _SHA256.py がありません。すべての失敗した努力の後、pyCrypto の使用をやめ、スタンドアロンの hashlib ライブラリを使用しようとしました。だから私else
はの部分を変更しましたapi.py
:
次に、hashlib のインポート中に、このインポート エラーが発生しました。
昨日同様の質問を投稿しましたが、正確な解決策を見つけることができなかったため、再度投稿しています。私は必死に解決策が必要です:(
python - Python 2.7 で pycrypto appengine を使用する
Google Appengine 内のコードで使用する必要がある対称キーを保護する最善の方法は何ですか?
私たちのアプリケーションは Python 2.7 を使用しています
編集: 保護したいデータベース フィールドがいくつかあります。コード内でアクセスする必要がありますが、それらをプレーン テキストでデータベースに残す理由はありません。明らかに、キーを取得するのをできるだけ難しくしたいと思います (決して不可能ではないことを理解しています)。
javascript - crypto-js と pycrypto での AES の問題
間の通信を実装しようとしています
Python サーバー側では、文字列を aniv
と apassphrase
で暗号化し、暗号化されたテキスト base64 でエンコードされた iv をjavascript クライアント側に送信します。次にdecrypt
、ユーザーが入力できるパスフレーズを含む文字列が必要です。
python-サーバー
JavaScript - クライアント
この例では、javascript エラーが発生します
しかし、これは 1 つの例にすぎません。考えられる base64 エンコーディング/デコーディングのすべてのコンスタレーションを試しました。モードも変えてみました。しかし、これらはすべてランダムなテストであり、私が本当にしなければならないことを理解したい.
- crypt-js が必要とするエンコーディングは何ですか?
- どのモードを選択すればよいですか?
- Pythonサーバー側で変更する必要があるものはありますか?
- パディングとは何ですか?障害がある可能性がありますか?
- 他に推奨できる JavaScript ライブラリはありますか?
どうもありがとうございました。
javascript - PyCryptoAESMODE_CTRにナンスとブロックカウントを含める
いくつかの背景情報、実際の質問のためにこの部分をスキップすることができます
これは、stackoverflowでのこのトピックに関する私の3番目の質問です。完全を期すために、これらはcrypt-jsとPyCryptoを使用したAESと、pythonおよびjavascriptでのAES de/encryptionとの一致に関する他の質問です。残念ながら、私の最後の試みでは、元の質問に対して2つの反対票がありました。問題は、私の本当の質問が何であるかを私でさえ知らなかったということでした。探していた本当の質問を見つけるために掘り下げました。コメントのフィードバックといくつかの追加情報を読んで、質問を更新しました。私は正しい質問を発掘していると思います。しかし、私の問題は、私の更新後にそれ以上のビューを取得しませんでした。ですから、この質問がより明確で理解しやすくなることを心から願っています-私の問題が今何であるかを知っていても:D
このクールなコミュニティにstackoverflowを作成していただき、ありがとうございます。ここで問題の解決策を見つけることがよくあります。悪い質問にはフィードバックを送り続けてください。そうすれば、それらを改善および更新して、この膨大な知識とソリューションのデータベースを増やすことができます。そして、私の英語の文法とスペルを自由に修正してください。
問題
JavascriptのAES
このJavascriptによるAES256CTRモードの実装で復号化できる暗号化された文字列があります
これにより、文字列が復号化され、アラートボックスがThis is a test Text
ポップアップ表示されます。
PyCryptoを使用したAES
今、私はこの文字列をpythonとPyCryptoで復号化したい
このコードは実行されません。取得しValueError: AES key must be either 16, 24, or 32 bytes long
ます。PyCryptoでさらに多くのことを実行し、次に復号化メソッドを呼び出す必要があることを認識したとき、私は自分が何をしなければならないかを理解するために調査を開始しました。
調査
私が最初に理解した基本的なことは次のとおりです。
- AES 256ビット(?)。ただし、AES標準は128ビットです。パスフレーズを32バイトに増やすだけで十分ですか?
- カウンターモード。AES.MODE_CTRを使用してPyCryptoに簡単に設定できます。ただし、counter()メソッドを指定する必要があります。そこで、PyCryptoが提供する基本的なバイナリカウンターを使用しました。これはJavascriptの実装と互換性がありますか?彼らが何をしているのか理解できません。
- 文字列はbase64でエンコードされています。大きな問題ではありません。
- 一般的なパディング。パスフレーズと暗号化された文字列の両方。
パスフレーズの場合、彼らはこれを行います:
それから私はPythonでこれをしました
しかし、これは役に立ちませんでした。私はまだ?
A???B??d9= ,?h????'
次のコードで奇妙な文字列を取得します
それから私はJavascriptの実装についてもっと読みましたそしてそれは言います
[...]この実装では、最初のブロックは最初の8バイトにナンスを保持し、次の8バイトにブロックカウントを保持します。[...]
これが解決策の鍵になると思います。そこで、Javascriptで空の文字列を暗号化するとどうなるかをテストしました。
警告ボックスに/gEKb+N3Y08=
(12文字)が表示されます。しかし、なぜ12?8 + 8 = 16バイトではないでしょうか?とにかく、andまたはで復号化をテストすることにより、Python復号化でブルートフォース方式を試しました。これは非常に恥ずかしい試みであることを私は知っていますが、私はますます必死になりました。そしてそれもうまくいきませんでした。for i in xrange(0,20):
ciphertext[i:]
base64.b64decode(ciphertext)[i:]
将来の見通しも同じ方法で暗号化を実装することです。
追加情報
暗号化された文字列は、もともとこのJavascript実装で暗号化されていませんでした。これは、別のソースからのものです。私は、Javascriptコードが正しいことをすることを認識しました。したがって、この種の実装は「標準」のようなものであると私は断言します。
質問
PyCryptoを使用した文字列からの暗号化と復号化がJavascript実装の場合と同じであるため、JavascriptとPythonの間でデータを交換できるようにするには、どうすればよいですか?また、別の暗号ライブラリを提案できる場合は、Pythonで別の暗号ライブラリに切り替えます。さらに、私はあらゆる種類のヒントやフィードバックに満足しています。
そして、すべては、暗号化された文字列にナンスとブロックカウントを含めるにはどうすればよいかということになります。復号化のためにこの情報を抽出するにはどうすればよいですか?
python - pycryptoをコンパイルするためにCFLAGSとLDFLAGSを設定する方法
古いマシンにファブリックライブラリをインストールしようとしています。/ usr / libには、libgmpなどのレガシーライブラリがいくつかあります。
$ HOME /appにlibgmp5.xをコンパイルしてから、pycryptoをインストールしようとしています(これはfabの依存関係です)。
インクルードディレクトリまたはlibディレクトリがコンパイル/リンクオプションに含まれていないことを確認しました。
CFLAGSとLDFLAGSをビルドに正しく割り当てるにはどうすればよいpycrypto
ですか?
pycrypto-2.5をダウンロードしてインストールしようとしています:
CFLAGSまたはLDFLAGSは設定されていません。pycrypto-2.5がうまくいかない可能性がありますか?
python - PyCrypto: ファイル内の公開鍵のみで復号化 (秘密鍵と公開鍵なし)
こんにちは、みんな。
私はRSAの公開鍵と秘密鍵、およびPyCryptoでの暗号化/復号化を少し試してみましたが、私には奇妙なように見える問題に遭遇しました(おそらく、現在の動作方法は非常に理にかなっていますが、私は知りません. RSA 非対称暗号化についてよく知らないので、困惑しています)。私が遭遇したのは、公開鍵だけを持つものを解読できないことです。
これが問題です。サーバーとクライアントがあります。サーバーがクライアントを「認識」して登録し、「既知のデバイス」のリストに表示するようにします。クライアントはサーバーの公開鍵を持ち、サーバーはクライアントの公開鍵を持つため、クライアントがサーバーと通信するとき、クライアントの秘密鍵とサーバーの公開鍵でデータを暗号化します。これを行うことにより、適切なサーバーのみが (秘密鍵を使用して) データを開くことができ、送信者が実際にクライアントであると主張するクライアントであることを確認できます。私はこの非対称暗号化の初心者なので、どう思いますか。アイデアは、これらのクライアントの 1 つが起動すると、その公開鍵を送信するというものです (もちろん、サーバーの公開鍵で暗号化されていますが、それは 'ねえ、私は新しいクライアントで、これが私の公開鍵です。その鍵を私のUUIDに登録してください」とサーバーは従い、その公開鍵をクライアントのUUIDに関連付け、その鍵を使用してそのクライアントからのデータを復号化します。クライアントの公開鍵を送信し、その秘密鍵を秘密に保ちたいだけです、シークレット(プライベートですよね?)
私はopensslとPyCryptoを使用する非常に単純なPythonスクリプトを使用していくつかのテストを行っています(実際には、サーバー/クライアントアーキテクチャなどでも...秘密鍵で何かを暗号化し、公開鍵で復号化しようとしています)
まず、公開/秘密鍵セットを次のように作成しました。
わかりました、最初に私を少し困惑させます...秘密鍵と公開鍵の両方を含むファイルを1つだけ生成します...まあ...わかりました...何でも。次の方法で公開鍵を抽出できます。
だから私は、秘密鍵(実際には秘密鍵と公開鍵)のカップルと公開鍵~/myTestKey.pem
を~/myTestKey.pub
それぞれ と に持っていると思いました。ええと... PyCryptoはこのアセンブリが好きではないので、どうやら私は何か間違っているようです。理由はわかりません。
encryptor.py
" " と " "という 2 つの非常に単純なテスト スクリプトがありdecryptor.py
ます。" encryptor.py
" は何かを秘密鍵で暗号化し、" decryptor.py
" はそれを公開鍵で復号化する必要があります。私は知っています... 私はオリジナリティのパラゴンです...
そこで、文字列 " Loren ipsum " を " encryptor.py
" (秘密鍵を使用) で暗号化します。
-----------encryptor.py ----------------
そして、それはうまくいきます。ええと...そう思うのですが、ファイル " /tmp/cryptThingy.txt
" には意味不明なことがたくさんあります。本当に、本当に暗号化されているように見えます。
しかし、公開鍵だけを含むファイルだけを使用して復号化しようとすると...
-----------decryptor.py ---------------
... PyCryptoは次のように叫びます。
はい、もちろん使えません!公開鍵を抽出しました!それを正しく行う方法を見つけるのに2時間かかりました!!
私は何が欠けていますか?私が言ったように、私はこの公開/秘密鍵の非対称キー暗号化ではかなり初心者なので、コアの「概念エラー」がある可能性があります...ヒントをいただければ幸いです。
前もって感謝します!