2015-05-06 57 views
5

我試圖使用OpenSSL庫將表示大整數的字符串p_str轉換爲BIGNUMp將一個以字符串形式給出的大數字轉換爲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)代替。

當你有一個bytes(而不是NULL結尾的ASCII字符串)的數組時,你可以使用BN_bin2bn

手冊頁位於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; 
} 
相關問題