Я новичок в 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?
Заранее благодарен!
Нет, это не правильно. Пожалуйста, внимательно посмотрите на код C++. Насколько я понимаю str (bootstrap) - это строковое представление объекта, но мне нужно строковое представление двух байтов из бутстрапа. Bootstrap - это структура (64-разрядное целое число со знаком). str (bootstrap.client) + str (bootstrap.server) - также неверно. – Ilya