【问题标题】:Wrong output from OpenSSL's BN_bn2dec?OpenSSL 的 BN_bn2dec 输出错误?
【发布时间】:2017-02-13 13:16:35
【问题描述】:

我正在尝试在 OpenSSL 中使用 BIGNUM 工具。我编写了以下测试程序:

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);

不幸的是,我得到一个“只有”大约 3000 个零的 1,而我希望得到一个带有 200001 个零的 1。如果我将相同的代码与其他库(例如 GMP 或 Tommath)进行比较,我确实得到了预期的输出。我是否以错误的方式使用 OpenSSL?

我在 macOS 上使用的是 1.0.2g 版本。

【问题讨论】:

  • 我认为您需要致电BN_new“[BN's] 使用动态内存分配来存储其数据结构...”。所以也许像BIGNUM* someSSLInt = BN_new(); 这样的东西。你也可以考虑检查BN_mul_word的返回值:"... 这些函数操作的数字的大小没有限制,但必须始终检查返回值,以防发生内存分配错误".
  • 我更改了代码以使用'new'函数,但'init'对于堆栈变量应该足够了。输出是相同的。我还添加了对“mul”函数的检查,但它没有返回错误。

标签: openssl


【解决方案1】:

原来问题不在 OpenSSL 中,而是在我的输出窗口中,意外截断了没有标记或其他东西的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2020-06-12
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2015-12-18
    相关资源
    最近更新 更多