#define FORMAT_ASN1 1
#define FORMAT_PEM 3
void *load_certificate(char *file, int format) {
void *x509 = NULL;
void *certbio;
certbio = BIO_new(BIO_s_file())) == NULL);
BIO_read_filename(certbio, file);
if (format == FORMAT_ASN1)
x509 = d2i_X509_bio(certbio, NULL);
else if (format == FORMAT_PEM)
x509 = PEM_read_bio_X509_AUX(certbio, NULL, NULL, NULL);
else
throw "Formato del certificato sconosciuto.";
BIO_free(certbio);
return(x509);
}
int main() {
char *certfile = "miocertificato.cer";
char *codicefiscale = "AAAZZZ99X99A000Z";
// Serve per verifica la versione della libreria
cout << "Versione di OpenSSL: " << SSLeay_version(SSLEAY_VERSION) << endl;
void *x509;
void *pkey;
void *rsakey;
void *crypted;
ERR_load_CRYPTO_strings();
OpenSSL_add_all_algorithms();
x509 = load_certificate(certfile, FORMAT_PEM);
pkey = X509_get_pubkey(x509);
X509_free(x509);
rsakey = EVP_PKEY_get1_RSA(pkey);
EVP_PKEY_free(pkey);
// Cifra il testo del codice fiscale
char *outdata;
int outdatalen;
int keysize;
keysize = RSA_size(rsakey);
outdata = (char*)OPENSSL_malloc(keysize);
outdatalen = RSA_public_encrypt(strlen(codicefiscale), codicefiscale,
outdata, rsakey, RSA_PKCS1_PADDING);
// A questo punto il valore e' cifrato RSA ma codificato binario (ovvero
non codificato)
// Codifica il risultato in Base64
void *b64;
crypted = BIO_new(BIO_s_mem());
b64 = BIO_new(BIO_f_base64());
BIO_push(b64, crypted); // Concatena i due BIO
BIO_write(b64, outdata, outdatalen);
BIO_flush(b64);
OPENSSL_free(outdata);
// Estrae il risultato
char *result;
int resultlen;
resultlen = BIO_pending(crypted);
result = (char *)malloc(resultlen + 1);
BIO_read(crypted, result, resultlen);
BIO_free_all(crypted);
cout << "Risultato:" << endl << result << endl << endl;
free(result);
}
"Infoservice" <pi...@aol.it> ha scritto nel messaggio
news:483aebff$0$35959$4faf...@reader2.news.tin.it...
> Qualche anima buona che conosce il c meglio di me, può tradurmi il codice
Francesco
"dr D'Aquila Francesco (Centro arte e cornici srl)"
<Francesco...@virgilio.it> ha scritto nel messaggio
news:483c1e55$0$18146$4faf...@reader3.news.tin.it...