c++ - 如何将 int 数组转换为 OpenSSL BIGNUM?

标签 c++ c openssl bignum

在 C++ 中,我尝试使用 OpenSSL 库将表示大整数的 int 数组转换为 BIGNUM。

用包含大数的十六进制编码的字符串没问题,但我找不到如何用数组来实现。

#include <openssl/bn.h>

int main()
{
    uint32_t hash[4] = { 0x3506fa7d, 0x6bb2dbe9, 0x9041d8e5, 0x6ea31f6b };
    const char p_hash[] = "3506fa7d6bb2dbe99041d8e56ea31f6b";

    BIGNUM *bn_result1 = BN_new();
    BN_hex2bn(&bn_result1, p_hash);

    std::cout << "Big number as Dec: " << BN_bn2dec(bn_result1) << std::endl;
    std::cout << "Big number as Hex: " << BN_bn2hex(bn_result1) << std::endl;

    // How to convert hash[4] to BIGNUM bn_result2?
}

最佳答案

htobe32BN_bin2bn 的可能解决方案:

for(i=0; i<4; i++) {
    hash[i] = htobe32(hash[i]); /* BN_bin2bn needs big endian data */
}

BN_bin2bn((const unsigned char *)hash, (4*4), &bn_result2);

如果您确定您的主机字节顺序是大端字节序,您可以省略转换,但这样做会失去可移植性。

编辑:

这同样适用于小端版本 BN_lebin2bn 如果您的主机字节顺序是小端。

关于c++ - 如何将 int 数组转换为 OpenSSL BIGNUM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55693757/

相关文章:

c++ - 拥有同名库的静态和动态版本是一种常见的做法吗?

python - 如何使用修改后的 OpenSSL(具有俄罗斯 GOST 支持)编译 python?

android - 在带有 NDK 的 Android 上使用带有 FFmpeg 的 openssl

rust - 使用 Rust 的 openssl 库加密/解密大文本

c++ - 使用命令行参数创建结构 vector

C++从函数返回指向数组的指针的正确方法

c++ - Opencv Ptr 类。函数调用后指针对象被删除

c++ - 运行快速修复引擎

c - 如何创建中断表

c - 为什么 getchar() 的行为不同?