2012-03-23 1 views
1

Я новичок в Python. Я стараюсь работать с сервером, используя протокол бережливостиПреобразование объекта Thrift в SHA1 digest

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?

Заранее благодарен!

ответ

1

Я полагаю, что str(bootstrap) вместо bootstrap должен работать.

+0

Нет, это не правильно. Пожалуйста, внимательно посмотрите на код C++. Насколько я понимаю str (bootstrap) - это строковое представление объекта, но мне нужно строковое представление двух байтов из бутстрапа. Bootstrap - это структура (64-разрядное целое число со знаком). str (bootstrap.client) + str (bootstrap.server) - также неверно. – Ilya

0

Это то, что было мне нужно:

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

Преобразовать i64 в 8 байт и обновление хэш с каждым байтом

 Смежные вопросы

  • Нет связанных вопросов^_^