Ir ao conteúdo
  • Cadastre-se

Sr. David Almeida

Membro Júnior
  • Posts

    19
  • Cadastrado em

  • Última visita

Reputação

2
  1. Tenho tentado criar um servidor de comunicação usando protocolo TLS, já li muito sobre, já testei um monte de exemplos na internet e sempre retorno no mesmo problema. Queria saber se alguém tem alguma source funcional ou se podem indicar o problema na ultima que tentei utilizar: #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <errno.h> #include <sys/types.h> #include <winsock.h> #include <openssl/rsa.h> #include <openssl/crypto.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/err.h> /* certificates root path */ #define HOME "./" /* certificate and private key */ #define CERTF HOME "micert.pem" #define KEYF HOME "mikey.key" /* checking fuctions */ #define CHK_NULL(x) if ((x)==NULL) exit (1) #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); } #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); } int err; int main () { int err; int listen_sd; int sd; struct sockaddr_in sa_serv; struct sockaddr_in sa_cli; int client_len; SSL_CTX* ctx; SSL* ssl; X509* client_cert; char* str; char buf [4096]; SSL_METHOD *meth; WORD wVersionRequested; WSADATA wsaData; /* SSL init. Keep the Key and the certificate in the context. */ SSL_load_error_strings(); SSLeay_add_ssl_algorithms(); ctx = SSL_CTX_new(SSLv23_client_method()); if (!ctx) { ERR_print_errors_fp(stderr); exit(2); } if (SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) <= 0) { ERR_print_errors_fp(stderr); exit(3); } if (SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM) <= 0) { ERR_print_errors_fp(stderr); exit(4); } if (!SSL_CTX_check_private_key(ctx)) { fprintf(stderr,"The private Key don’t match with the certificate\n"); exit(5); } /*****************************************************/ /* */ /* Socket Initialitation */ /* */ /*****************************************************/ wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup(wVersionRequested, &wsaData ); if ( err != 0 ) { printf("///Error in WSAStartup//%d\n",err); exit(err); } listen_sd = socket (AF_INET, SOCK_STREAM, 0); printf("socket() return 0x%X (%d)\n", listen_sd, listen_sd); CHK_ERR(listen_sd, "socket"); memset (&sa_serv, '\0', sizeof(sa_serv)); sa_serv.sin_family = AF_INET; sa_serv.sin_addr.s_addr = INADDR_ANY; sa_serv.sin_port = htons (9000); /* Server listen Port */ err = bind(listen_sd, (struct sockaddr*) &sa_serv, sizeof (sa_serv)); CHK_ERR(err, "bind"); /*****************************************************/ /* */ /* setting listening */ /* */ /*****************************************************/ printf("listening\n"); err = listen (listen_sd, 5); CHK_ERR(err, "listen"); client_len = sizeof(sa_cli); sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len); CHK_ERR(sd, "accept"); closesocket (listen_sd); printf ("Connection from %lx, port %x\n", sa_cli.sin_addr.s_addr, sa_cli.sin_port); /*****************************************************/ /* */ /* preparing SSL with the recived socket */ /* */ /*****************************************************/ ssl = SSL_new (ctx); CHK_NULL(ssl); SSL_set_fd (ssl, sd); err = SSL_accept (ssl); CHK_SSL(err); /* Showing cipher - optional */ printf ("SSL connection using %s\n", SSL_get_cipher (ssl)); /* Get Client cert, if exist - optional */ client_cert = SSL_get_peer_certificate (ssl); if (client_cert != NULL) { printf ("Client Certificate:\n"); str = X509_NAME_oneline (X509_get_subject_name (client_cert), 0, 0); CHK_NULL(str); printf ("\t subject: %s\n", str); OPENSSL_free (str); str = X509_NAME_oneline (X509_get_issuer_name (client_cert), 0, 0); CHK_NULL(str); printf ("\t issuer: %s\n", str); OPENSSL_free (str); /* Here we could check all we want about client certificate. */ X509_free (client_cert); } else printf ("The Client hasn’t certificate.\n"); /* Exchanging messages */ err = SSL_read (ssl, buf, sizeof(buf) - 1); CHK_SSL(err); buf[err] = '\0'; printf ("Read %d characters:'%s'\n", err, buf); err = SSL_write (ssl, "I’m listening.", strlen("I’m listening.")); CHK_SSL(err); /* Freeing resources */ closesocket (sd); SSL_free (ssl); SSL_CTX_free (ctx); } A proposito, sempre que a função: ERR_print_errors_fp(stderr); é executada é retornado o seguinte erro: "OPENSSL_Uplink(61d60550,08): no OPENSSL_Applink". Já procurei a respeito e a unica solução que encontrei foi incluir a biblioteca applink, o problema é que ela não existe na versão do OpenSsl que uso. Windows 7 starter Code::Blocks 16.01 MinGW Win32OpenSSL-1_1_0c C++11 ISO Bibliotecas linkadas: ws2_32, libcrypto-1_1.a,libssl-1_1.a Desde já grato.
  2. @vangodp Na verdade não tinha entendido direito já que tinha tentando usar em um arquivo de texto e também tinha dado o problema... Aí que entra a parte do texto plano... kkk'
  3. @MassakiMsk Estou me sentindo burro por não ter tentado isto... kkk', mas vale um desconto por causa do horário que estava mexendo com isso.... Enfim, a solução deu certo tanto para arquivos binários quanto para arquivos de texto. Obrigado.
  4. O problema é que o arquivo é lido de forma correta, usando um cout consigo ler todos os Bytes Hexadecimais..., mas já para escrever, alguns dados são estranhamente alterados, e o mesmo acontece com arquivos de texto(estranhamente, com arquivos de texto, só acontece quando há uma quebra de linha, e isto na mesma proporção). Resumindo, o problema, de alguma forma está entre o char usado e o write, porque ao printar os dados dessa array, todos etão corretos, o contrario de quando o arquivo é escrito, que de alguma forma, até o tamanho está diferente da variavel siz usada.
  5. Estou estudando sobre arquivos em C++. O problema é que, leio um arquivo qualquer para uma variável, e após salvar esta variável em um arquivo alguns dados são corrompidos, sendo distorção em imagens e problemas em quebra de linha em arquivos de texto, além de um estranho aumento no tamanho do arquivo... IDE: Code::Blocks SO: Windows 10 x64 c++11 ISO Segue o código: #include <fstream> #include <iostream> using namespace std; int main () { ifstream file("ico.jpg"); file.seekg(0,file.end); int siz=file.tellg(); char value[siz]; file.seekg(0,file.beg); file.read(value,siz); ofstream out("out.jpg"); out.write(value,siz); return 0; } Desde já, grato.
  6. Estou estudando sobre arquivos em C++. O problema é que, leio um arquivo qualquer para uma variável, e após salvar esta variável em um arquivo alguns dados são corrompidos, sendo distorção em imagens e problemas em quebra de linha em arquivos de texto, além de um estranho aumento no tamanho do arquivo... IDE: Code::Blocks SO: Windows 10 x64 c++11 ISO Segue o código: #include <fstream> #include <iostream> using namespace std; int main () { ifstream file("ico.jpg"); file.seekg(0,file.end); int siz=file.tellg(); char value[siz]; file.seekg(0,file.beg); file.read(value,siz); ofstream out("out.jpg"); out.write(value,siz); return 0; } Desde já, grato.
  7. Galera, estou tentando começar estudos em assembly, porém não consigo encontrar um Linker... Alguem poderia fornecer um link com um Assembler bom e um Linker que funcione SO: Windows 10 x64
  8. Entendi. Eu quero criar um arquivo binário com as configurações do programa o qual estaria desenvolvendo. Basicamente precisava saber como guardar variáveis em um binário e fazer com que ao executar este arquivo binário criado, ele abra o programa com as configurações nele estabelecidas.
  9. Já ajudou bastante, só pra confirmar: as extensões são configuradas plenamente pelo registro que é feito pela linha de comando... Por exemplo, o Code Blocks tem a extensão .cbp, a qual contem seus dados de configuração do projeto. A forma a qual o Code Blocks vai tratar o que foi "escrito" nesta extensão está escrita inteiramente no registro? Basicamente, queria criar uma extensão e abri-la a partir do meu programa.
  10. Dei uma pesquisada na internet e não encontrei material de estudo..., queria entender mais como funcionam as extensões no SO windows, tanto na implementação do programa principal quanto do arquivo derivado. Se alguém tiver sites ou apostilas que falam sobre o conteúdo seria bom. Desde já, grato.
  11. KKKKKKK. Bem..., neste caso os parenteses se fazem necessários pôs sem eles e os outros separadores o resultado sairá diferente. Na minha humilde opinião feio é algo como:((-X-Y(+2Z(-3A)/7B) *3))
  12. Poise, não curti a operação cheia de parenteses, queria definir algo do tipo: 1º - Operador X, 2º - Operador Y, º Operador Z...
  13. Poise, já tinha conseguido ter a ordem certa com os parenteses, só que achei meio feio como ficou e queria um jeito de garantir a ordem sem os parenteses...
  14. Para ser mais especifico, eu só preciso de um método para priorizar operações, por exemplo: a multiplicação deve ser feita antes da soma.
  15. Galera, estou trabalhando em uma serie de cálculos que usam por toda parte funções, para melhor entendimento, resolvi fazer sobrecarga de operadores. porém o resultado não está saindo como antes quando utilizava as funções. De modo que se eu utilizo parenteses para especificar que a ordem das operações é da esquerda para direita, o resultado sai como o esperado, como teste resolvi colocar um 'std::cout<<"(simbolo do operador)"...', para ver a ordem de execução, até que percebi que os cálculos aparecem de forma totalmente aleatória... Queria saber como defino que a ordem de execução da operação será da esquerda para direita. SO: Win7 IDE: Code::blocks Compilador: GNU GCC C++11 ISO Desde já, grato.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...