2015-05-06 15 views
5

'a dönüştürüyorumdizesini, OpenSSL kütüphanesini kullanarak BIGNUMp numaralı büyük bir tamsayıyı dönüştürmeye çalışıyorum. Bunu yürütmek zaman şu sonucu olsun,Bir dize olarak verilen bir büyük sayıyı bir OpenSSL BIGNUM

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

Ama:

#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; 
} 

ile Derleyen

3832303139313534 

cevap

8
unsigned char *p_str = "82019154470699086128524248488673846867876336512717"; 

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

kullanın int BN_dec2bn(BIGNUM **a, const char *str) yerine.

bytes (ve NULL sonlandırılmış bir ASCII dizesi değil) diziniz varsa, BN_bin2bn kullanırsınız.

Man sayfaları BN_bin2bn(3) adresinde bulunmaktadır.

doğru kod şu şekilde görünecektir:

#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; 
} 
İlgili konular