1

私はPythonの初心者です。Thriftプロトコルを使用してサーバーを操作しようとしています

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 )
}

このアルゴリズムを使用してSHA1ダイジェストを作成する必要があります:ブートストラップ+パスワード+誰+ブートストラップ。

ブートストラップを作成するには、これを使用します。

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を使用してそれを行う方法を説明できますか?

前もって感謝します!

4

2 に答える 2

1

str(bootstrap)代わりにbootstrap動作するはずだと思います。

于 2012-03-23T22:06:13.367 に答える
0

これは私が必要としていたものです:

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

i64を8バイトに変換し、バイトごとにハッシュを更新します

于 2012-03-25T20:27:28.003 に答える