Результаты BN_hex2bn и BN_bn2hex не совпадают?

я использую openssl в моем проекте C ++, но проблема запутала меня.

  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;

К моему удивлению, результат следующий:

rsa->n:
0xee2200
rsa->d:
0xee2220
rsa->e:
0xee2240
pRSAKey->n:
0xee2fa0
pRSAKey->d:
0xee2fc0
pRSAKey->e:
0xee3390

Итак, почему значение изменилось? Что я должен сделать, чтобы исправить мой код?

0

Решение

Вы печатаете адреса указателей.

От документы мы можем видеть, что члены RSA являются pointers в 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_print или же BN_print_fp напечатать BIGNUM,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector