2015-05-06 20 views
5

Próbuję przekonwertować ciąg p_str reprezentujący dużą liczbę całkowitą do BIGNUMp przy użyciu biblioteki OpenSSL.Konwertuj dużą liczbę podaną jako ciąg na 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; 
} 

Opracowano go z:

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

Ale kiedy go wykonać, otrzymuję następujący wynik:

3832303139313534 

Odpowiedz

8
unsigned char *p_str = "82019154470699086128524248488673846867876336512717"; 

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

Zastosowanie int BN_dec2bn(BIGNUM **a, const char *str) zamiast.

Użyłbyś BN_bin2bn, gdy masz tablicę bytes (a nie ciąg znaków ASCII zakończony NULL).

Strony podręcznika znajdują się pod adresem BN_bin2bn(3).

Poprawny kod wyglądałby następująco:

#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; 
} 
Powiązane problemy