2015-05-06 2 views
5

Я пытаюсь преобразовать строку p_str, представляющую большое целое число в BIGNUMp с использованием библиотеки OpenSSL.Преобразование большого числа, заданного как строка в OpenSSL BIGNUM

#include <stdio.h> 
#include <openssl/bn.h> 

int main() 
{ 
    /* I shortened the integer */ 
    unsigned char *p_str = "82019154470699086128524248488673846867876336512717"; 

    BIGNUM *p = BN_bin2bn(p_str, sizeof(p_str), NULL); 

    BN_print_fp(stdout, p); 
    puts(""); 

    BN_free(p); 
    return 0; 
} 

Составитель его:

gcc -Wall -Wextra -g -o convert convert.c -lcrypto 

Но, когда я исполню его, я получаю следующий результат:

3832303139313534 

ответ

8
unsigned char *p_str = "82019154470699086128524248488673846867876336512717"; 

BIGNUM *p = BN_bin2bn(p_str, sizeof(p_str), NULL); 

Используйте int BN_dec2bn(BIGNUM **a, const char *str) вместо этого.

Вы должны использовать BN_bin2bn, когда у вас есть массив из bytes (а не AULL-строка с завершающим символом NULL).

Страницы руководства расположены по адресу BN_bin2bn(3).

Правильный код будет выглядеть следующим образом:

#include <stdio.h> 
#include <openssl/bn.h> 

int main() 
{ 
    static const 
    char p_str[] = "82019154470699086128524248488673846867876336512717"; 

    BIGNUM *p = BN_new(); 
    BN_dec2bn(&p, p_str); 

    char * number_str = BN_bn2hex(p); 
    printf("%s\n", number_str); 

    OPENSSL_free(number_str); 
    BN_free(p); 

    return 0; 
} 
Смежные вопросы