1
我是Python中的新手。我嘗試使用節儉協議將Thrift對象轉換爲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)
}
我需要使用這個algoritm創建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辦呢?
在此先感謝!
不,這是不正確的。請仔細查看C++代碼。據我瞭解str(bootstrap) - 這是對象的字符串表示,但我需要從bootstrap開始的兩個字節的字符串表示。 Bootstrap是結構(64位有符號整數)。 str(bootstrap.client)+ str(bootstrap.server) - 也不正確。 – Ilya 2012-03-24 07:26:02