Как преобразовать хэш OpenSSL SHA-512 в номер GMP для использования в методе шифрования RSA

SHA1(data, length, hash);
unsigned char *labelPtr;

labelPtr = hash;
mpz_set_str (encrypted, labelPtr, 16);
gmp_printf("hashed= %Zd\n", encrypted);

encrypted равно 0? Мне нужно получить целое число из этого хеша, чтобы выполнить шифрование RSA. Я вижу хэш при отладке, но не могу превратить его в int. Это SHA-512, значит 512 бит? Странные символы выходят из printf("%s",hash); atoi тоже дает 0, нужно ли разбивать хеш по символам? Это сработает, я думаю.


person csestony    schedule 07.10.2012    source источник
comment
Я вижу, что SHA1 и SHA1 160-битные.   -  person ouah    schedule 07.10.2012
comment
да, sha1 меньше, но 512 более безопасен, и gmp должен справиться с этим   -  person csestony    schedule 07.10.2012
comment
Дело не в этом, вы упомянули SHA-512, но ваша программа использует функцию SHA1.   -  person ouah    schedule 07.10.2012
comment
нет, это открытый ssh, поэтому вы можете определить sha 512 unsigned char hash [SHA_DIGEST_LENGTH];   -  person csestony    schedule 07.10.2012
comment
sha_digest_length в open ssl определяет sha 1, который составляет 160 бит, или 256, или 512, я определил его как 512.   -  person csestony    schedule 07.10.2012


Ответы (1)


mpz_set_str второй параметр должен быть строкой.

Аргумент hash, который вы передаете функции SHA1, вероятно, не является строкой. Преобразуйте его в строковый формат перед передачей в функцию mpz_set_str.

person ouah    schedule 07.10.2012
comment
\355\020\ — это значение в хеше после - person csestony; 07.10.2012
comment
если я использую printf, выводятся странные символы printf(%s,hash); так что я уверен, что это строка ... просто очень странный atoi тоже дает 0, мне нужно разбить хэш по символу, потому что это сработает, я думаю - person csestony; 07.10.2012
comment
@Thefirstkilla mpz_set_str (encrypted, labelPtr, 16) требует, чтобы у вас была строка и базис 16 для использования. Ваша строка должна быть доступна для печати: вам нужно преобразовать массив в строку со значениями 16. Вы можете использовать sprintf для этого. - person ouah; 07.10.2012