2011-01-27 13 views
13

暗号化がどのように機能し、特にPythonでコード化されているかを完全に理解するのは苦労しています。私はちょうど基本を理解し、最も簡単な形式でコードを作成しようとしています。python暗号化の基本事項hashlib sha1

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

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

ので、それぞれのウェブサイトは知っている共有秘密鍵があると言うことができます:

shared_private_key = "ABCDEF" 

そして、私はWEBSITE1がWEBSITE2にユーザーIDを渡したいの:

私のユーザーIDを暗号化WEBSITE1だろうか
userID = "123456" 

暗号化をHTTPヘッダー経由で送信できるようにプライベートキーを設定してから、Webサイト2を復号化し、共有秘密鍵を使用してuserIDを読み取らせることができますか?

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

+2

'hashlib'は暗号化されていません。 –

+4

または、language-agnostic:hasing!= encryptingを入力します。 – delnan

答えて

14

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) 

最後に、データと署名をウェブサイト2に送信します。そうすれば、不正な人物がデータを改ざんしていないことを(大部分は)確信することができます。

3

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

+0

hashlib.pyモジュールは標準ではありませんか? – kommradHomer

+7

暗号化ではなく、ハッシュ関数のみを提供します。 –

16

暗号ライブラリは、ハッシュアルゴリズムだけを提供するものではありません。 Pythonのhashlibライブラリと:

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

戻り値:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

このハッシュを考えると、それは元のメッセージを復元することは不可能 極めて困難 (一般的に)です。 Python標準ライブラリにはない暗号化ライブラリが必要です。役に立つかもしれないので、あまりにも多くのquestions related to python cryptography librariesがあります。