web-dev-qa-db-ja.com

python暗号化とhashlibsha1の基本

特にPythonで、暗号化がどのように機能し、コーディングされているかを完全に理解するのに苦労しています。基本を理解し、最も単純な形式でコードを作成しようとしています。

2つの異なるサイト間でuserIDを渡すことにしますが、Website2がWebsite1からのものであることを認識できるように、これを秘密鍵で暗号化する必要があることは明らかです。これは私にとってのコードのようです: http://docs.python.org/library/hashlib.html#module-hashlib しかし、あまり良い例はありません(または多分私は間違った場所にあるm)。

私が抱えている問題は、エンコードとデコードの方法を完全に理解することです。

したがって、各Webサイトが知っている共有秘密鍵は次のとおりです。

shared_private_key = "ABCDEF"

そして、Website1がWebsite2に次のユーザーIDを渡すようにします。

userID = "123456"

Website1は、暗号化をHTTPヘッダー経由で送信できるように、秘密鍵を使用してユーザーIDを暗号化し、Website2で復号化して、共有秘密鍵を使用してユーザーIDを読み取ることができるようにするにはどうすればよいですか?

このような基本的な質問をされたことをお詫びしますが、これがどのように行われるべきか理解できていません。ありがとう。

15
adam

hashlibモジュールはハッシュ関数を提供します。暗号化にはある程度の関係がありますが、一度データをハッシュすると、ハッシュ結果から元のデータを取得するために戻ることはできません。

データを暗号化する代わりに、別のアプローチを取ることができます。データのハッシュといくつかの秘密を使用して一意の署名を作成します。

shared_private_key = "ABCDEF"

def create_signature(data):
    return hashlib.sha1(repr(data) + "," + shared_private_key).hexdigest()

def verify_signature(data, signature):
    return signature == create_signature(data)

最後に、データと署名をWebサイト2に送信します。そうすれば、許可されていない人がデータを改ざんしていないことを(ほとんど)確信できます。

16
vz0

必要なのは、ハッシュアルゴリズムを提供するだけの暗号化ライブラリではありません。 Pythonのhashlibライブラリを使用する場合:

import hashlib
m = hashlib.sha1()
m.update("The quick brown fox jumps over the lazy dog")
print(m.hexdigest())

戻り値: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

このハッシュを考えると、 非常に難しい 元のメッセージを復元することは(一般的に)不可能です。必要なのは暗号化ライブラリです。これはPython標準ライブラリにはありません。たくさんあります python暗号化ライブラリに関連する質問) on SO役立つかもしれません。

16
devoid

Python標準ライブラリには暗号化アルゴリズムがありません。 pycrypto を試してください。いくつかの例があります ここ

3
Marek Sapota