шифрование — RSA шифрование для C ++ (BB10)

Решено (ищите мой ответ). Мне нужна помощь в шифровании пароля с помощью RSA на C ++. Я работаю на Blackberry10 в C ++, и я искал учебник RSA или что-то, что поможет мне пройти процесс шифрования, но, к сожалению, я не нашел ничего непротиворечивого.

Мне сказали, что процесс состоит в основном из трех этапов:

1) Сгенерируйте открытый ключ RSA с модулем и показателем степени.
2) Зашифруйте текст открытым ключом.
3) Снова зашифруйте текст в base640.

Если вам интересно, почему я должен следовать этим трем шагам, потому что я работаю в банковском приложении, и это их требования.

Я искал повсюду и даже не нашел, как сделать первый шаг, сгенерировать открытый ключ с помощью модуля и экспоненты (у меня уже есть оба).

Любая помощь будет оценена.

Благодарю.


Разве это не то, что я создаю целое приложение самостоятельно. Мы — команда, и мне нужно только зашифровать пароль клиента с помощью RSA и отправить его на следующий шаг процесса. У меня есть опыт работы с Blackberry и RSA, но в Java, где процесс немного проще, например: В Java первый шаг после получения модуля и открытого экспонента — это создание объекта открытого ключа RSA с помощью очень простого синтаксиса: RSAPublicKey publicKey = новый RSAPublicKey (новая RSACryptoSystem (2048), эбайты, мегабайты) ;. В этой части я немного растерялся, потому что не нашел надлежащей документации BB10. Мне жаль, если я создал иллюзию, что я создаю целый API шифрования самостоятельно. BB10 имеет этот API безопасности, основанный на hursa.h (https://developer.blackberry.com/native/beta/reference/com.qnx.doc.crypto/topic/about_rsa_raw.html) Я пытаюсь реализовать его, но Я не был успешным. @owlstead @dajames @bta

0

Решение

Я настоятельно рекомендую вам воспользоваться существующей библиотекой шифрования, чтобы справиться со всем этим для вас. OpenSSL широко используется, и LibTom библиотеки также содержат библиотеку шифрования. Шифрование нелегко реализовать с нуля, и вы сэкономите немало времени и усилий, используя существующую реализацию. OpenSSL, в частности, является хорошим выбором, так как он неоднократно проходил сертификационные тесты FIPS. Поскольку вы работаете над банковским приложением, вы (и ваши клиенты), скорее всего, захотите использовать сертифицированную реализацию.

Даже если вы настаиваете на создании собственных библиотек шифрования с нуля, я призываю вас в качестве примеров использовать вышеупомянутые библиотеки.

3

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

Мне кажется, что вы знаете о том, как работает эта криптография, даже меньше, чем вы думаете.

Обычно не используют шифрование RSA для шифрования данных. Это может быть сделано для чего-то короткого, такого как ПИН-код или пароль, но обычно это делается для генерации симметричного ключа и шифрования данных с помощью симметричного ключа, а затем с помощью RSA для шифрования симметричного ключа.

Если вы отправляете пароль в банк, то, вероятно, вы должны использовать ключ RSA, предоставленный банком, в своем собственном сертификате ключа. Только у банка есть закрытый ключ, поэтому только они могут расшифровать пароль. Если это правильно, вам не нужно генерировать ключ RSA, но вам нужно проверить, что сертификат является доверенным.

Я не программирую Blackberry, поэтому я не знаю, какие API-интерфейсы криптографии они поддерживают, но я ожидаю, что все, что вам нужно, будет встроено. Это все довольно стандартные вещи.

Я рекомендую начать с чтения криптографии с открытым ключом (например в Википедии Вот а также Вот) прежде чем приступить к разработке вашего решения.

1

Решено. Проведя некоторые исследования и познакомившись с кодировкой BB10 и RSA, я наконец-то нашел решение для успешного шифрования простого текста с помощью RSA и Base64 на C / C ++ для BB10 или любой другой платформы. Пожалуйста, примите во внимание, что у меня есть модуль и открытый показатель для объекта rsa из сервисов, с которыми я работаю.

Код:

    QByteArray answer;

RSA* rsa = RSA_new();

BIGNUM *modulus = BN_new();
BIGNUM *exponent = BN_new();
const char *modulusString = rsaObj->getM(); //My Modulus
const char *exponentString = rsaObj->getE(); //My exponent

BN_hex2bn(&modulus, modulusString);
BN_hex2bn(&exponent, exponentString);

rsa->n = BN_new();
BN_copy(rsa->n, modulus);
rsa->e = BN_new();
BN_copy(rsa->e, exponent);

int maxSize = RSA_size(rsa);
qDebug() << "maxSize:" << maxSize;

const char *inn = "1234";
unsigned char *encrypted = (unsigned char*) malloc(maxSize);
int bufferSize = RSA_public_encrypt(strlen(inn), (unsigned char *) inn,
encrypted, rsa, RSA_PKCS1_PADDING);

if (bufferSize == -1) {
RSA_free(rsa);
qDebug() << "Error";
}

QByteArray enc = QByteArray::fromRawData((const char*) encrypted, 256);
answer = enc.toBase64();

return answer;

Спасибо, и я ожидаю, что это поможет новым разработчикам BB10

0