Torna indietro   Hardware Upgrade Forum > Software > Programmazione

TCL 65C7K, televisore Mini-LED di qualità, versatile e dal prezzo competitivo
TCL 65C7K, televisore Mini-LED di qualità, versatile e dal prezzo competitivo
Tecnologia Mini LED, pannello 4K QLED HVA a 144Hz e audio Bang & Olufsen: il nuovo TCL 65C7K si candida come best buy per l’intrattenimento domestico a tutto tondo, con promozioni che ne esaltano il rapporto qualità/prezzo
Fujifilm X-E5: la Fuji X che tutti gli appassionati volevano
Fujifilm X-E5: la Fuji X che tutti gli appassionati volevano
Dopo il fascino un po’ elitario della GFX100RF e le polemiche intorno a x Half, la nuova Fujifilm X-E5 riporta tutti d’accordo: una mirrorless compatta, leggera, elegante, e finalmente con stabilizzazione IBIS a bordo anche sulla serie E. Con il sensore da 40 MP e il processore X-Processor 5, eredita prestazioni da sorelle più costose, ma con l'ergonomia del mirino laterale in stile telemetro e una nuova ghiera per le simulazioni pellicola. Il tutto a un prezzo che, seppur più alto della precedente X-E4, la pne in kit al parti di X100VI
Recensione REDMAGIC 10S Pro: il gaming phone definitivo?
Recensione REDMAGIC 10S Pro: il gaming phone definitivo?
Il REDMAGIC 10S Pro è uno smartphone da gaming estremo che unisce il nuovo Snapdragon 8 Elite Leading Version, display AMOLED 144Hz da 6,85", raffreddamento ICE-X a metallo liquido e batteria da 7.050 mAh per prestazioni e autonomia al top.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-09-2014, 18:30   #1
Nagashi890
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 11
[C] Aiuto librerie OpenSSL

Ciao a tutti..
devo usare le librerie OpenSSL in C per proteggere la comunicazione tra un client e un server
utilizzando l'algoritmo RSA, ma il programma non funziona e non so più dove sbattere la testa..

questo è il codice del client che cripta una stringa con la funzione encryptString()

Codice:
#include <openssl/rsa.h>
#include <openssl/rand.h>
#include <openssl/pem.h>
#include <openssl/evp.h>

int encryptString(char* string, char* dataout, char* filename, RSA* rsa) {

	int size;
	char file_pem_pub[36];
	strcpy(file_pem_pub, filename);
	FILE* fp;

	fp = fopen(file_pem_pub, "r");    //file che contiene la chiave creata in precedenza

	rsa = PEM_read_RSAPublicKey(fp, &rsa, NULL, NULL);
	
	RSA_public_encrypt(strlen(string), string, dataout, rsa, RSA_PKCS1_PADDING);
	
	size = strlen(dataout);
	
	fclose(fp);
	
	return size;
}

int main() {
	
	int rsa_size;
	int ret;
	char* dataout;     //buffer che deve contenere il messaggio criptato
        //char* message = <stringa da criptare>

	OpenSSL_add_all_algorithms();
	RSA* rsa = RSA_new();

	rsa_size = RSA_size(rsa);

	dataout = malloc(rsa_size);

	memset(dataout, 0, sizeof(dataout));
	ret = encryptString(message, dataout, "spub.pem", rsa);
	RSA_free(rsa);
}
Il programma dà errore di segmentazione quando esegue la funzione RSA_size()
non so più che correzioni fare.. spero che qualcuno mi possa aiutare.

Grazie!
Nagashi890 è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2014, 11:43   #2
Nagashi890
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 11
Allora.. ho risolto l'errore di segmentazione togliendo la funzione encryptString e mettendo tutto nel main..

Ora però il problema è che il server non decripta, e la funzione RSA_private_decrypt() restituisce -1

riporto il codice del server e del client saltando tutto il codice relativo alla creazione dei socket.

Codice:
//Client

        generate_RSA_keys("cpub.pem", "cpriv.pem");

	printf("Inserisci il tuo nome: ");
	fflush(stdout);

	scanf("%s", nome);

	//RSA ALGORITHM

	// Context allocation
	OpenSSL_add_all_algorithms();
	RSA* rsa = RSA_new();

	//Encryption
	FILE* fp;
	fp = fopen("spub.pem", "r");

	rsa = PEM_read_RSAPublicKey(fp, &rsa, NULL, NULL);
	rsa_size = RSA_size(rsa);
	
	cnome = (char*)malloc(rsa_size);
	memset(cnome, 0 , sizeof(cnome));
	
	nlen = strlen(nome);
	RSA_public_encrypt(nlen, nome, cnome, rsa, RSA_PKCS1_PADDING);

	//Context deallocation
	RSA_free(rsa);
	fclose(fp);

	int c_len = strlen(cnome);
	ret = send(sk, (void*)cnome, c_len+1, 0);
Codice:
//Server

        generate_RSA_keys("spub.pem", "spriv.pem");	

	ret = recv(c_sk, (void*)cnome, sizeof(cnome), 0);

	//RSA ALGORITHM
	//Context allocation
	OpenSSL_add_all_algorithms();
	RSA* rsa = RSA_new();
	
	FILE* fp;
	fp = fopen("spriv.pem", "r");

	//Decryption
	rsa = PEM_read_RSAPrivateKey(fp, &rsa, NULL, NULL);
	
	rsa_size = RSA_size(rsa);
	
	nome = (char*)malloc(rsa_size);
	memset(nome, 0, sizeof(nome));
	c_len = strlen(cnome);
	n = RSA_private_decrypt(rsa_size, cnome, nome, rsa, RSA_PKCS1_PADDING);
	
	//Context deallocation
	RSA_free(rsa);
	fclose(fp);
Questa è la funzione generate_RSA_keys()

Codice:
void generate_RSA_keys(char* public, char* private) {
	
	char file_pem[strlen(private)];
	char file_pem_pub[strlen(public)];
	strcpy(file_pem, private);
	strcpy(file_pem_pub, public);
	FILE *fp;

	int bits = 1024;
	unsigned long exp = RSA_F4;
	RSA *rsa;
	rsa = RSA_generate_key(bits,exp,NULL,NULL);

	fp = fopen(file_pem, "w");
	unsigned char *kstr = "pass";
	PEM_write_RSAPrivateKey(fp,rsa,EVP_des_ede3_cbc(),kstr,strlen(kstr),NULL,NULL);
	fclose(fp);
	fp = fopen(file_pem_pub, "w");
	PEM_write_RSAPublicKey(fp, rsa);
	fclose(fp);
	RSA_free(rsa);
	
}
La stringa criptata viene ricevuta correttamente dal server.. ma poi non viene decriptata..
Ho visto però che a volte funziona, altre volte dà questo errore:

Codice:
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02

Ultima modifica di Nagashi890 : 06-09-2014 alle 11:51.
Nagashi890 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


TCL 65C7K, televisore Mini-LED di qualità, versatile e dal prezzo competitivo TCL 65C7K, televisore Mini-LED di qualità...
Fujifilm X-E5: la Fuji X che tutti gli appassionati volevano Fujifilm X-E5: la Fuji X che tutti gli appassion...
Recensione REDMAGIC 10S Pro: il gaming phone definitivo? Recensione REDMAGIC 10S Pro: il gaming phone def...
HPE Discover 2025: tra agenti intelligenti, infrastruttura AI-native e un futuro ibrido HPE Discover 2025: tra agenti intelligenti, infr...
Radeon RX 9060 XT, assalto a NVIDIA? Ecco come va la nuova scheda video di AMD Radeon RX 9060 XT, assalto a NVIDIA? Ecco come v...
Questo HP Victus con GeForce RTX 4070 è ...
Economici, potenti e di marca: portatili...
Gemini porta i suoi assistenti AI ovunqu...
Lisa Su vs. Jensen Huang: la regina dell...
Amazon oggi svende gli iPhone: c'è il 16...
Groove Thing è il primo lettore m...
Helldivers 2 arriva su Xbox il 26 agosto...
La missione cinese Apophis Recon Swarm (...
Offerta Starlink kit Standard: l'hardwar...
3I/ATLAS è la cometa interstellar...
Kojima Productions e Romero Games sarebb...
Da spazzatura a lingotto: la rivoluzione...
Dacia è ancora il brand più...
Niente dazi per Polestar 7: sarà ...
AMD Radeon RX 9070 XT, con l'ultimo aggi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www1v