Utilização de Thread em Java com Socket e Criptografia
computêro | 06/04/2009Boa noite computeros, cá estou eu depois de chegar de mais uma prova (dessa vez eu fui bem, muito bem, 2 em dois pontos), o assunto: Socket, Thread e criptografia…
Tudo a ver né huahuahuahuha, o que importa é que o exercício foi bacana e eu achei de postar pra vocês aqui…
Agora vamos ao que interessa, os fontes…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | /* * ============================================================ * Lucas Felix de Sousa - 736627 * Avaliação Parcial de Técnicas de Programação II - A * Universidade Cruzeiro do Sul * http://blog.computero.com.br * ============================================================= * * Classe com implementação de Thread, comunicação client-server * Utilização de Criptografia, Socket e Thread * * ============================================================= * */ import java.io.*; import java.net.*; import java.util.*; public class ServerCrypt extends Thread{ private static Vector clientes; private Socket conexao; public ServerCrypt(Socket s){ conexao = s; } /*Método para criptografar um texto qualquer, * passando como parâmetro a mensagem em string * e a chave em inteiro */ public static String Crypt(String msg,int n){ String newMsg=""; /*for para deixar os caracteres ao contrario * exemplo: * aeiou - uoiea */ for (int i=msg.length()-1;i>=0;i--) { /*somar a quantidade de digitos (n) ao char*/ newMsg += "" + (char)(msg.charAt(i)+n); } //retornando a mensagem criptografada return(newMsg); } /*Método para desciptografar a criptografia anterior * passando como parâmetro a mensagem a ser descriptografada em String * e a chave em inteiro */ public static String Descrypt(String msg,int n){ String newMsg=""; /*for para deixar os caracteres de volta ao normal * exemplo: * uoiea - aeiou */ for (int i=msg.length()-1;i>=0;i--) { /*subtrair a quantidade de digitos (n) ao char*/ newMsg += "" + (char)(msg.charAt(i)-n); } return newMsg; } public static void main(String args[]){ clientes = new Vector(); try{ ServerSocket s = new ServerSocket(6666); while(true){ System.out.print("Esperando alguem se conectar..."); Socket conexao = s.accept(); System.out.println(" Conectou!"); Thread t = new ServerCrypt(conexao); t.start(); } } catch(IOException e){ } } public void run(){ try{ //para receber os dados dos clientes BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream())); //para enviar os dados para os clientes PrintStream saida = new PrintStream(conexao.getOutputStream()); //texto padrão ao cliente se conectar String texto = " Cliente" + conexao.getInetAddress() + " - " + conexao.getInetAddress().getHostName() + " tenta se comunicar "; System.out.println(texto + " Pronto para o envio dos dados... "); try{ while(true) { String strCliente[] = entrada.readLine().toString().split(";"); /*verifica se os dados enviados pelo cliente estão em 3 parâmetros * opção - crypt ou descrypt (IgnoreCase) * num - Um digito inteiro entre 0 e 9 * mensagem - uma string com QUALQUER texto, inclusive espaços */ if (strCliente.length != 3) { saida.println("Formato inválido. [OPCAO;NUM;MENSAGEM]"); } else { try{ int num; num = Integer.parseInt(strCliente[1]); /*O número digitado é mudado de acordo com a tabela a seguir: * num: 0 ou 1 --> A = B (soma 1) * num: 2 ou 3 --> A = C (soma 2) * num: 4 ou 5 --> A = D (soma 3) * num: 6 ou 7 --> A = E (soma 4) * num: 8 ou 9 --> A = F (soma 5) */ if ((num == 0) || (num==1)){ num = 1; } else if ((num == 2) || (num==3)){ num = 2; } else if ((num == 4) || (num==5)){ num = 3; } else if ((num == 6) || (num==7)){ num = 4; } else if ((num == 8) || (num==9)){ num = 2; } else{ saida.println("Formato do número inválido"); } /*Verifico qual a opção desejada pelo cliente e devolvo a resposta*/ if (strCliente[0].equalsIgnoreCase("CRYPT")){ saida.println( Crypt( strCliente[2], num ) ); } else if(strCliente[0].equalsIgnoreCase("DESCRYPT")){ saida.println( Descrypt( strCliente[2], num ) ); } else{ saida.println("Comando inválido, somente [Crypt] e [Descrypt]"); } } catch(Exception e) { saida.println("Erro ao converter a chave"); } } } } catch(Exception ex){ } } catch(IOException e){ System.out.println("IOException: " + e); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | /* * ============================================================ * Lucas Felix de Sousa - 736627 * Avaliação Parcial de Técnicas de Programação II - A * Universidade Cruzeiro do Sul * http://blog.computero.com.br * ============================================================= * * Classe com implementação de Thread, comunicação client-server * Utilização de Criptografia, Socket e Thread * * ============================================================= * */ import java.io.*; import java.net.*; public class ClientCrypt extends Thread{ private Socket conexao; //private static boolean done = false; public ClientCrypt(Socket s) { conexao = s; } public static void main(String args[]){ try{ /*indico a qual computador ele vai se conectar e a qual porta * lembrando que é recomendável utilizar portas maiores que 1000 * pois as anteriores são reservadas ao Sistema Operacional */ Socket conexao = new Socket("localhost", 6666); Thread t = new ClientCrypt(conexao); //iniciando a Thread e chamando o método run() t.start(); } catch(IOException e){ System.out.println("IOException: " + e); } } public void run(){ try{ //receber os dados do servidor BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream())); //receber os dados do teclado BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); //enviar dados para o servidor PrintStream saida = new PrintStream(conexao.getOutputStream()); while (true) { /*Exemplo de utilização: * Criptografar: * crypt;7;http://computero.com.br * Descriptografar: * descrypt;7;vf2qsg2svixytqsg2kspf33>txxl */ System.out.println("Envie a mensagem para o servidor no seguinte formato: [OPCAO;NUM;MENSAGEM], ou FIM para sair"); String str = teclado.readLine(); //se for fim saio do loop if (str.equalsIgnoreCase("FIM")) { break; } else { //senão envio pro servidor e obtenho a resposta saida.println(str); System.out.println("Resposta: " + entrada.readLine() + " "); } } } catch(IOException e){ } } } |
Utilização no cliente:
Opção: Crypt ou Descrypt
Num: Números de 0 a 9
Texto: qualquer texto
Exemplo de utilização:
- Criptografar:
crypt;7;http://computero.com.br
- Descriptografar:
descrypt;7;vf2qsg2svixytqsg2kspf33>txxl
Os dois arquivos estão comentados, portanto, qualquer dúvida, já sabem… comentem!
Popularity: 4% [?]
Nenhum post relacionado.
Posts relacionados trazidos a você pelo Yet Another Related Posts Plugin.







