将Thrift对象转换为SHA1摘要

时间:2012-03-23 21:54:37

标签: python hashlib

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

我需要使用这个algoritm创建SHA1摘要:bootstrap + password + who + bootstrap。

要创建bootstrap,我使用:

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

更新方法参数类型只有字符串,我无法理解如何将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进行操作吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我认为str(bootstrap)代替bootstrap应该有用。

答案 1 :(得分:0)

这就是我的需要:

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

将i64转换为8个字节并使用每个字节更新哈希