Ich versuche, einen öffentlichen RSA-Schlüssel aus einem Modulo-Typ char [] zu generieren, und jetzt ist der Exponent RSA_F4 (65537); Aber wenn ich versuche, meinen öffentlichen Schlüssel zu generieren, der diese Werte für "n" und "e" verwendet, gibt RSA_public_encrypt -1 zurück;So erstellen Sie einen öffentlichen RSA-Schlüssel aus einem unsigned char * Modul und Exponent 65537 (RSA_F4)
Danke!
Mein Code:
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <crypt.h>
#include <iostream>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/aes.h>
#include <openssl/opensslconf.h>
#include <openssl/engine.h>
#include <openssl/pem.h>
#include <openssl/rc4.h>
using namespace std;
int main(void)
{
//modulus in format char hex;
char key[] = "C0E7FC730EB5CF85B040EC25DAEF288912641889AD651B3707CFED9FC5A1D3F6C40062AD46E3B3C3E21D4E71CC4800C80226D453242AEB2F86D748B41DDF35FD";
char palavra[] = "teste";
char crip[512];
int ret;
RSA * pubkey = RSA_new();
BIGNUM * modul = BN_new();
BIGNUM * expon = BN_new();
BN_hex2bn(&modul, (const char *) key);
BN_hex2bn(&expon, "010001");
cout << "N KEY: " << BN_bn2hex(modul) << endl;
cout << "E KEY: " << BN_bn2hex(expon) << endl;
pubkey->n = modul;
pubkey->e = expon;
cout << "N PUB KEY: " << BN_bn2hex(pubkey->n) << endl;
cout << "E PUB KEY: " << BN_bn2hex(pubkey->e) << endl;
if (RSA_public_encrypt(strlen((const char *) palavra), (const unsigned char *) palavra, (unsigned char *) crip, pubkey, RSA_PKCS1_PADDING))
{
printf("ERRO encrypt\n");
}
else
{
printf("SUC encrypt\n");
}
return 0;
}
Sie scheinen Ihr Modul in 'X' zu lesen, die Sie nie erklären, so dass 'modul' als 0. Sie auch nie den Modul in' pubkey' setzen, so es ist wahrscheinlich immer noch leer, was zu einem Fehler bei y führt Sie versuchen, 'RSA_public_encrypt' aufzurufen. Wenn Sie tatsächliche Hilfe benötigen, müssen Sie den echten Code veröffentlichen, den Sie versucht haben zu kompilieren und auszuführen. –
Sorry, aber mein letzter Beitrag wurde für einen Fehler eingefügt. –