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