2012-03-23 6 views
1

私はPythonの初心者です。ブートストラップ+パスワード+ブートストラップを+:私はこのそのアルゴリズムを使用してSHA1ダイジェストを作成する必要がスリフトプロトコルにスリフトオブジェクトをSHA1ダイジェストに変換する

struct AuthSalt { 
    1: required i64 client, /* random data */ 
    2: required i64 server, /* data from previous answer */ 
} 

struct AuthRequest { 
    1: required AuthSalt bootstrap, 
    2: required string who,   /* login */ 
    3: required string signature,  /* SHA-1: bootstrap + password + who + bootstrap. */ 
} 

exception NotAuthorisedException { 
    1: required string description 
} 

service Bookworm { 
    AuthResponse Authenticate(1: required AuthRequest a, 2: required string locale) 
     throws (1: NotAuthorisedException e) 
} 

を使用してサーバで動作するようにしてみてください。

dig = hashlib.sha1 
bootstrap = AuthSalt(0, 0) 
dig.update(bootstrap) 
dig.update(password + who) 
dig.update(bootstrap) 

しかし更新メソッドの引数の型のみの文字列と私は文字列にブートストラップを変換する方法を理解することはできません:私はこれを使用して、ブートストラップを作成するには

。 Cでは

++このコードは次のようになります。

SHA_CTX c; 
      ::SHA1_Init(&c); 
      ::SHA1_Update(&c, &bootstrap, sizeof(bootstrap)); 
      ::SHA1_Update(&c, password.c_str(), password.size()); 
      ::SHA1_Update(&c, who.c_str(), who.size()); 
      ::SHA1_Update(&c, &bootstrap, sizeof(bootstrap)); 
      ::SHA1_Final(digest, &c); 

誰かのpythonを使用して、それを行う方法を説明できますか?

ありがとうございます!

答えて

1

bootstrapの代わりにstr(bootstrap)が動作するはずです。

+0

ませんでは、これは正しくありません。 C++コードを注意深く見てください。私はstr(ブートストラップ)を理解しているので、これはオブジェクトの文字列表現ですが、ブートストラップから2バイトの文字列表現が必要です。 ブートストラップは構造体(64ビット符号付き整数)です。 str(bootstrap.client)+ str(bootstrap.server) - も正しくありません。 – Ilya

0

これは私が必要だったものである:8バイトに

for x in tuple(struct.pack("Q",bootstrap.client)): 
    dig.update(x) 

コンバートI64と更新ハッシュを各バイト

関連する問題