2017-02-13 127 views
0

我正在嘗試在OpenSSL中使用BIGNUM工具。我已經寫了下面的測試程序:OpenSSL的BN_bn2dec錯誤輸出?

BIGNUM someSSLInt; 

BN_init(&someSSLInt); 

BN_set_word(&someSSLInt, 10); 

for (unsigned i=0; i<100000; i++) { 
    BN_mul_word(&someSSLInt, 100) 
} 

char *sslstr=BN_bn2dec(&someSSLInt); 
printf("%s",sslstr); 

不幸的是,我得到一個1「只有」約3000個零,而我希望一個1 200001零。如果我將相同的代碼與其他庫(例如GMP或Tommath)進行比較,我會得到預期的輸出結果。我是否以錯誤的方式使用OpenSSL?

我在macOS上使用版本1.0.2g。

+0

我想你需要調用['BN_new'](https://www.openssl.org/docs/man1.0.2/crypto/bn.html):*「[BN's]使用動態內存分配來存儲它數據結構...」*。所以也許像'BIGNUM * someSSLInt = BN_new();'。你也可以考慮從['BN_mul_word'](https://www.openssl.org/docs/man1.0.2/crypto/BN_mul_word.html)檢查返回值:*「...對大小沒有限制這些函數操縱的數字,但是在發生內存分配錯誤時必須始終檢查返回值「*」。 – jww

+0

我更改了代碼以使用'new'函數,但'init'應該足夠用於堆棧變量。輸出是相同的。我還在'mul'功能上添加了一個檢查,但它不返回任何錯誤。 –

回答

0

原來,問題不在OpenSSL中,而是在我的輸出窗口中,意外地截斷沒有標記或字符串的字符串。