BN#hex20亿和BN#bn2hex dosen的结果';不匹配? 我在C++项目中使用 OpenSSL ,但一个问题使我困惑。 RSA *rsa = RSA_generate_key(kBits, kExp, 0, 0); cout << "rsa->n: " << endl << rsa->n << endl << "rsa->d: " << endl << rsa->d << endl << "rsa->e: " << endl << rsa->e << endl; char *n_b = BN_bn2hex(rsa->n); char *d_b = BN_bn2hex(rsa->d); char *e_b = BN_bn2hex(rsa->e); n_s = std::string(n_b); d_s = std::string(d_b); e_s = std::string(e_b); RSA *pRSAKey = RSA_new(); BN_hex2bn(&pRSAKey->n, n_s.c_str()); BN_hex2bn(&pRSAKey->d, d_s.c_str()); BN_hex2bn(&pRSAKey->e, e_s.c_str()); cout << "pRSAKey->n: " << endl << pRSAKey->n << endl << "pRSAKey->d: " << endl << pRSAKey->d << endl << "pRSAKey->e: " << endl << pRSAKey->e << endl;

BN#hex20亿和BN#bn2hex dosen的结果';不匹配? 我在C++项目中使用 OpenSSL ,但一个问题使我困惑。 RSA *rsa = RSA_generate_key(kBits, kExp, 0, 0); cout << "rsa->n: " << endl << rsa->n << endl << "rsa->d: " << endl << rsa->d << endl << "rsa->e: " << endl << rsa->e << endl; char *n_b = BN_bn2hex(rsa->n); char *d_b = BN_bn2hex(rsa->d); char *e_b = BN_bn2hex(rsa->e); n_s = std::string(n_b); d_s = std::string(d_b); e_s = std::string(e_b); RSA *pRSAKey = RSA_new(); BN_hex2bn(&pRSAKey->n, n_s.c_str()); BN_hex2bn(&pRSAKey->d, d_s.c_str()); BN_hex2bn(&pRSAKey->e, e_s.c_str()); cout << "pRSAKey->n: " << endl << pRSAKey->n << endl << "pRSAKey->d: " << endl << pRSAKey->d << endl << "pRSAKey->e: " << endl << pRSAKey->e << endl;,c++,openssl,bignum,C++,Openssl,Bignum,那么,为什么值会改变呢?如何更正代码?您正在打印指针地址 从中我们可以看到,RSA的成员是指向BIGNUM的指针: struct { BIGNUM *n; // public modulus BIGNUM *e; // public exponent BIGNUM *d; // private exponent BIGNUM *p; // secret

那么,为什么值会改变呢?如何更正代码?

您正在打印指针地址

从中我们可以看到,
RSA
的成员是指向
BIGNUM
指针:

struct
    {
    BIGNUM *n;              // public modulus
    BIGNUM *e;              // public exponent
    BIGNUM *d;              // private exponent
    BIGNUM *p;              // secret prime factor
    BIGNUM *q;              // secret prime factor
    BIGNUM *dmp1;           // d mod (p-1)
    BIGNUM *dmq1;           // d mod (q-1)
    BIGNUM *iqmp;           // q^-1 mod p
    // ...
    };
RSA
此外,我们还从中了解到:

此库中的基本对象是BIGNUM。它是用来举行一个会议的 单个大整数。此类型应视为不透明字段 不应直接修改或访问


使用
BN\u print
BN\u print\u fp
打印
BIGNUM

我怀疑打印
rsa->n
等时,您打印的是指针的值,而不是
n
指向的大数字的值。没有看到RSA的结构,我不能确定。是的,你的怀疑是对的。谢谢你的帮助!谢谢你的帮助!
struct
    {
    BIGNUM *n;              // public modulus
    BIGNUM *e;              // public exponent
    BIGNUM *d;              // private exponent
    BIGNUM *p;              // secret prime factor
    BIGNUM *q;              // secret prime factor
    BIGNUM *dmp1;           // d mod (p-1)
    BIGNUM *dmq1;           // d mod (q-1)
    BIGNUM *iqmp;           // q^-1 mod p
    // ...
    };
RSA