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。
我想你需要調用['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
我更改了代碼以使用'new'函數,但'init'應該足夠用於堆棧變量。輸出是相同的。我還在'mul'功能上添加了一個檢查,但它不返回任何錯誤。 –