CHRISTIANO RODARTE VALE - Space DevMedia
CHRISTIANO RODARTE VALE << Space Anterior | Pr�ximo Space >>
�ltimas 20 atualiza��es de CHRISTIANO RODARTE VALE
Artigo - Criptografia MD5
Criptografia � o ato de codificar dados em informa��es aparentemente sem sentido, para que pessoas n�o consigam ter acesso �s informa��es que foram cifradas. H� v�rios usos para a criptografia em nosso dia-a-dia: proteger documentos secretos, transmitir informa��es confidenciais pela Internet ou por uma rede local, etc.
A t�cnica usada em Criptografia envolve pura e simples matem�tica. O sistema de criptografia usado atualmente � extremamente seguro. Especialistas estimam que para algu�m conseguir quebrar uma criptografia usando chaves de 64 bits na base da tentativa e erro, levaria cerca de 100.000 anos usando um PC comum.
Mas porque � t�o seguro? Simples, uma chave de 2 bits ter� 4 combina��es poss�veis. Uma chave de 4 bits, ter� 16 combina��es poss�veis e assim por diante. Agora, vejamos a grande diferen�a: uma chave de apenas 8 bits ter� 65.356 combina��es poss�veis e, em uma chave de 32 bits existem mais de 4 bilh�es de combina��es, que para serem decifradas levariam mais de 2 meses (levando em conta 1000 tentativas por segundo, por parte do computador).
Neste artigo veremos como implementar um sistema de criptografia usando MD5. Implementaremos uma classe que criptografa os dados de uma senha usada em uma autentica��o (login).
O MD5 (Message-Digest algorithm 5) � um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, usado por softwares com protocolo ponto-a-ponto (P2P), verifica��o de integridade e logins. Foi desenvolvido para suceder ao MD4 que tinha alguns problemas de seguran�a. Por ser um algoritmo unidirecional, um hash MD5 n�o pode ser transformado novamente na password (ou texto) que lhe deu origem. O m�todo de verifica��o �, ent�o, feito pela compara��o das duas hash (uma da base de dados, e a outra da tentativa de login). O MD5 tamb�m � usado para verificar a integridade de um ficheiro atrav�s, por exemplo, do programa md5sum, que cria a hash de um ficheiro. Isto pode-se tornar muito �til para downloads de ficheiros grandes, para programas P2P que constroem o ficheiro atrav�s de peda�os e est�o sujeitos � corrup��o de ficheiros.
O MD5 � de dom�nio p�blico para uso em geral. A partir de uma mensagem de um tamanho qualquer, ele gera um valor hash de 128 bits; com este algoritmo, � computacionalmente impratic�vel descobrir duas mensagens que gerem o mesmo valor, bem como reproduzir uma mensagem a partir do seu digest. O algoritmo MD5 � utilizado como mecanismo de integridade em v�rios protocolos de padr�o Internet (RFC1352, RFC1446, etc.), bem como pelo CERT e CIAC.
Se o MD5 n�o pode ser descriptografado, qual � ent�o sua utilidade?
Message Digests s�o fun��es hash que geram c�digo de tamanho fixo, em uma �nica dire��o, a partir de dados de tamanho arbitr�rio. Esses c�digos hash s�o extremamente �teis para seguran�a de senhas. Como ele n�o pode ser descriptografado, o c�digo hash precisa ser re-gerado e comparado com a seq��ncia dispon�vel anteriormente. Se ambos se igualarem, o acesso � liberado. A API Java implementa dois algoritmos de Message Digest: o MD5 e o SHA-1.
A API do Message Digest (java.security.MessageDigest)
Para que se possa gerar textos cripografados, � necess�rio seguir os seguintes passos. 1 - Obter uma inst�ncia do algoritmo a ser usado. 2 - Passar a informa��o que se deseja criptografar para o algoritmo. 3 - Efetuar a criptografia. Para se obter uma inst�ncia de um algoritmo de criptografia Message Digest, utiliza-se o m�todo getInstance() da classe MessageDigest. MessageDigest md = MessageDigest.getInstance(�MD5�);
Ap�s a chamada a getInstance(), voc� possui uma refer�ncia a um objeto pronto para criptografar seus dados utilizando o algoritmo especificado. Neste caso o MD5.
Finalmente, para gerar a chave criptografada, voc� chama o m�todo digest().
As assinaturas existentes s�o:
1 byte[] digest();2 byte[] digest(byte[] input);3 int digest(byte[] buf, int offset, int len) throws DigestException;
Construindo uma classe para criptografar dadosPrimeiramente vamos criar um m�todo est�tico para gera��o do algoritmo de criptografia:
08/01/2007 09:42:00
Artigo - UML para Java
Tendo em vista os rumores que giram em torno deste novo exame da Sun, SCJA � Sun Certified Java Associates, (que, ali�s, eu fiz o exame.) onde o tema � cobrado, e aproveitando a oportunidade de apresentar de maneira simplificada como ilustrar projetos de sistemas orientados a objetos, resolvi escrever este tutorial que explica brevemente as caracter�sticas da Unified Modeling Language(UML), fornecendo a nota��o convencional que aplicamos para ilustrar este projeto. Embora ela n�o seja excessivamente complexa, podemos subestimar facilmente o poder das caracter�sticas que ela nos fornece. Para uma apresenta��o mais completa leia The Unified Modeling Language User Guide (Booch, Rumbaugh, and Jacobson 1999). Assimilando o uso das nomenclaturas e nota��es padr�o, aprendemos a nos comunicar no n�vel de projetos, tornando-nos mais produtivos.
A figura abaixo aplica algumas caracter�sticas usadas para ilustrar classes:
� Para indicar a exist�ncia de um pacote, coloque o nome dele em um ret�ngulo alinhado � esquerda, com caixa maior, na qual podem conter: classes e interfaces. A figura 1 mostra o pacote com.oozinoz.fireWorks.
� A UML n�o exige que o diagrama mostre tudo a respeito do objeto retratado, como todo o conte�do do pacote ou todos os m�todos de uma classe.
� O nome da classe deve ser mostrado centralizado em um ret�ngulo. (A Figura 1 mostra 2 classes: Classification e fireWork).
� As vari�veis de inst�ncia de juma classe devem ser mostradas em um ret�ngulo abaixo do nome da classe. A classe fireWork possui as var�veis de inst�ncia name, price, calssification. Coloque dois-pontos depois do nome da vari�vel e ent�o o tipo da vari�vel.
� Os m�todos de uma classe podem ser mostrados em segundo ret�ngulo, abaixo do nome dela. A classe fireWork possui um construtor, um m�todo com o mesmo nome dela e possui pelo menos mais 3 m�todos: flies(), getName(), setClassification().
� Quando um m�todo receber par�metros, de forma geral devemos mostr�-los, com o m�todo setClassification().
� As vari�veis nas assinaturas dos m�todos de forma geral aparecem da seguinte forma: : . Podemos omitir ou abreviar o nome da vari�vel se seu tipo implica o papel dela.
� Podemos indicar que um m�todo ou uma vari�vel de inst�ncia de uma classe est�o protegidos (protected) colocando o sinal sustenido(#) na sua frente. O sinal mais(+) indica que o m�todo ou a vari�vel � do tipo public e o sinal menos(-) indica que o m�todo ou a vari�vel s�o do tipo private.
� Para indicar que uma vari�vel de inst�ncia � est�tica � e tem escopo de classe � deixe-a sublinhada como o m�todo flies().
� Um ret�ngulo com orelha pode ser usado para desenhar notas. O texto dessa nota pode conter: coment�rios, restri��es, ou c�digo. Uma linha tracejada � usada para anexar as notas a outros elementos do diagrama.
Figura 2: Um objeto MachineComposite cont�m objetos Machine ou outros composites. A classe Customer depende da classe LikeMyStuff sem instanci�-la.
� Coloque o nome da classe ou m�todo em it�lico para indicar que a classe ou m�todo s�o abstratos.
� Uma ponta de flecha fechada e oca � usada para apontar ...
28/11/2006 09:18:00
Artigo - JfreeChart & iReport � Parte II
JfreeChart & iReport � Parte II
Criando o Modelo no iReport
Agora vamos criar um modelo no iReport para receber:
1 � Os dados que geraram o gr�fico apresentados em forma de listagem;
2 � A imagem do gr�fico;
Vamos Criar 3 fields para receber os valores que dar�o origem ao gr�fico. Repare que tem os mesmos nomes da entidade ModeloGraficoItem.
Figura 4 � cria��o do Fields no iReport.
Nesta mesma tela, na aba Parameters vamos criar o par�metro que ir� receber a imagem. Observe que este par�metro deve ser do tipo java.lang.Object:
Figura 5 � cria��o do par�metro imagem.
Para mostrar a imagem do gr�fico vamos criar um campo na Banda Sumary com a ferramenta ImageTools que receber� um objeto imagem por par�metro:
Figura 6 � Propriedades do campo ImageTools.
A montagem final do Modelo ficou assim (salvo com o nome de ModeloGrafico):
Figura 7 � ModeloGrafico.jrxml.
O c�digo a seguir � de um Servlet que tem como �nica fun��o:
� Receber os valores gerados pela classe ComposicaoDadosItemGrafico;
� Chamar a classe GeradorGrafico para criar um gr�fico a partir dos da dados recebidos;
� Chamar o ModeloGrafico.jasper exibindo o relat�rio em formato PDF em uma janela do browser.
Para criar a imagem do gr�fico vamos usar a classe BufferedImage que ser� o objeto adicionado ao par�metro. Como os m�todos da classe GeradorGrafico s�o est�ticos a chamada � feita da seguinte forma:
BufferedImage imagem = GeradorGrafico.gerarGraficoLinha3D("Titulo", "Mes", "Quantidade", array);
A classe HashMap de java.util � usada para passar os par�metros para o relat�rio:
parametros.put("imagem", imagem);
Repare o nome do par�metro: � o mesmo nome do objeto criado com a ferramenta ImageTools.
public class ServletRelatorioGrafico extends HttpServlet {
17/11/2006 10:45:00
Artigo - JfreeChart & iReport � Parte I
JfreeChart & iReport � Parte I
O que � JFreeChart?
JFreeChart � uma biblioteca livre para a plataforma Java(tm). Foi desenvolvida para ser utilizada em Aplica��es Desktop, Applets, Servlets e JSP.
Figura 1 � Exemplo de gr�fico do JFreeChart.
Jfreechart pode ser usado para gerar gr�ficos de Pizza, gr�ficos de Barra, gr�ficos de linha (com ou sem efeito 3D), gr�ficos combinados, dentre diversos outros tipos de gr�ficos. Exporta dados para o formato PNG ou JPEG, Exporta para qualquer formato usando a implementa��o de Graphics2D incluindo:
� PDF via iText (http://www.lowagie.com/iText/);
� SVG via Batik (http://xml.apache.org/batik/);
Jfreechart � inteiramente escrito em Java e pode ser utilizado em qualquer implementa��o da plataforma Java 2 (JDK 1.2.2 ou superior).
JfreeChart pode ser baixado a partir do endere�o:
Neste endere�o voc� poder� obter as ultimas informa��es sobre JfreeChart, exemplos de gr�ficos, downloads, documenta��o e at� um f�rum.
Neste tutorial, procurarei mostrar como se faz para criar um gr�fico a partir de uma fonte de dados e mostrar este gr�fico em um relat�rio gerado no iReport a partir de um Servlet. Usando como exemplo um relat�rio comparativo de vendas de CDs e DVDs durante um certo per�odo.
N�o daremos muitas explica��es sobre iReport, pois este n�o � o objetivo deste tutorial. Apresentaremos apenas como montar um modelo no iReport para receber o gr�fico gerado.
Veremos tamb�m que o c�digo necess�rio para a chamada do relat�rio � m�nimo.
Para este tutorial usei o JfreeChart 1.0.1 que � a ultima vers�o dispon�vel para Download.
A API de Java Servlets � uma tecnologia muito usada para a cria��o de Aplica��es Web e JfreeChart � um servi�o muito bom para ser usado tamb�m por Servlets.
Neste tutorial vamos mostrar um Servlet gerando um gr�fico e em seguida chamando um relat�rio criado no iReport mostrando o gr�fico gerado.
O m�todo doGet(...)
O m�todo doGet(...) � chamado pelo Servlet quando uma requisi��o � enviada pelo cliente (geralmente atrav�s de um browser). Em resposta � requisi��o o Servlet que iremos criar ir� realizar os seguintes passos:
Obt�m uma referencia de OutputStream para retornar uma sa�da ao cliente; Cria o gr�fico; Um content type para a resposta � settado para Application/Pdf para exibir o relat�rio em formato PDF; Criar o relat�rio passando para ele os dados que geraram o gr�fico e a imagem do gr�fico gerada. Fechar o OutputStream.
Adicionando os Jar�s
Os .jar�s do JfreeChart que utilizei s�o jcommon-1.0.0.jar e jfreechart-1.0.1.jar. Primeiramente vamos adicion�-los ao lib do nosso projeto.
Figura 2 � Adicionando os jar�s do JFreeChart.
Os Jar�s do iReport que utilizei s�o: jasperreports-1.2.0.jar, commonslogging-api-1.0.2.jar, commons-collections-3.1.jar, barbecue-1.1.jar, iReport.jar, commons-beanutils-1.5.jar, itext-1.3.1.jar.
Figura 3 � Adicionando os jar�s do iReport.
Gerando os Gr�ficos
Primeiramente, vamos criar as classes ModeloGraficoItem que armazenar� os dados que dar�o origem ao gr�fico e ComposicaoDadosItemGrafico que gerar� valores arbitr�rios que ser�o exibidos no gr�fico:
17/11/2006 10:44:00
Artigo - Upload de arquivos usando Commons-FileUpload
Introdu��oNeste tutorial, mostrarei como se faz para enviar arquivos para um servidor atrav�s de uma aplica��o Web, utilizando o Commons-FileUpload da Jakarta. Ser�o mostradas duas maneiras de se fazer isso:1 � Enviar uma imagem para o servidor guardando-a em um campo BLOB do Banco de Dados;2 � Enviar uma imagem para o servidor, guard�-la em um diret�rio e armazenar seu endere�o no Banco de Dados;Vis�o GeralA API Commons FileUpload tornou f�cil e robusta a capacidade de realizar Uploads atrav�s de seus Servlets e aplica��es Web.FileUpload analisa gramaticalmente as requisi��es HTTP conforme RFC 1867 (http://www.ietf.org/rfc/rfc1867.txt) "Form-based File Upload in HTML". Isto quer dizer que, se uma requisi��o http for submetida usando um m�todo POST, a partir de um formul�rio tipo "multipart/form-data", ent�o FileUpload pode analisar gramaticalmente esse pedido, e retornar os resultados de maneira f�cil para o m�todo que o chamou. Download do FileUpload 1.1.1Commons-FileUpload pode ser baixado a partir do endere�o:http://jakarta.apache.org/commons/fileupload/index.htmlAp�s fazer o download e extrair os arquivos, adicione o commons-fileupload-1.1.1.jar ao seu projeto.Documenta��oNeste tutorial procuraremos dar mais aten��o � codifica��o do que � teoria. Uma documenta��o completa sobre o Commons-FileUpload pode ser encontrada em:http://jakarta.apache.org/commons/fileupload/using.htmlhttp://jakarta.apache.org/commons/fileupload/apidocs/index.htmle, tamb�m no pacote FileUpload 1.1.1.zip Definindo um formul�rio para o envio do arquivoComo exemplo, vamos fazer o upload de uma imagem para o servidor. Um formul�rio simples deve ser criado em HTML para levar a imagem at� nossa aplica��o. Este formul�rio deve obrigatoriamente ser do tipo �multipart/form-data":<form id="formImagem" name="formImagem" method="post" action="servletupload" enctype="multipart/form-data"><input type="hidden" id="tipoForm" name="tipoForm" value="imagem"><input name="imagem" type="file" accept="image/jpeg; image/gif; image/bmp; image/png" id="imagem" class="dados" maxlength="60" tabindex="1" value="c:/" position:absolute; top:23px; left:12px; width:500px; ">
<input type="submit" id="upload" name="upload" tabindex="2" position:absolute; top:20px; left:532px; >
Agora vamos criar um Servlet para receber esta requisi��o:
// implementa��o de demais m�todos do Servlet.
Se voc� analisou o c�digo do Servlet acima, deve ter notado a chamada ao m�todo inserirImagem(item) que ainda n�o foi implementado. Pois bem, iremos agora escrever este m�todo que ir� inserir a imagem em um campo Blob do banco de dados. Para este exemplo eu usei o MySql.
A estrutura e cria��o da tabela deste exemplo s�o:
14/11/2006 11:53:00
Artigo - Utilizando a API Commons-email para enviar E-mails
Recentemente, me deparei com a situa��o em que precisava enviar e-mails de forma autom�tica a partir de minha aplica��o web.
A partir da� encontrei, al�m da j� conhecida API JavaMail, uma outra API do projeto Jakarta Apache, o Commons-email.
O Commons-email foi desenvolvido como uma camada mais abstra�da da API JavaMail (J2EE-API) o que a tornou mais simples e robusta.
Atrav�s do commons-email, � poss�vel enviar e-mails simples, com textos puros, em formato HTML e tamb�m e-mail com anexos conforme mostraremos neste tutorial.
Observa��o: Este tutorial � inteiramente referente � documenta��o dispon�vel em:
O commons-email pode ser baixado a partir do endere�o:
Ap�s descompactar o arquivo commons-email-1.0.zip, o arquivo commons-email-1.0.jar deve ser referenciado na pasta lib da sua aplica��o.
� SimpleEmail � Esta classe � usada para enviar e-mails simples. � MultiPartEmail - Esta classe � usada emitir mensagens multipart. Isto permite uma mensagem de texto com anexos. � HtmlEmail � Esta classe envia emails formatados como HTML. � EmailAttachment � Esta classe � usada para se criar os anexos do email. Enviando um e-mail simples
Nosso primeiro exemplo criar� uma mensagem simples de e-mail para �John Doe� e a enviar� atrav�s do seu servidor de e-mail.
email.addTo("jdoe@somewhere.org", "John Doe"); //destinat�rio
A chamada ao setHostName(�mail.myserver.com�) ajusta o endere�o do servidor smtp que ser� usado emitir a mensagem. Se esta op��o n�o for ajustada, a propriedade �mail.host� do sistema ser� usada.
Enviando e-mails com anexo Para enviar e-mails com anexos deve-se utilizar a classe MultiPartEmail. Essa classe trabalha da mesma forma que a classe SimpleEmail, exceto pela adi��o do m�todo attach() que ser� utilizada para adicionar os anexos ao e-mail. N�o h� limite para o n�mero de anexos (na verdade o servidor de e-mail utilizado que ir� impor o limite de anexos).
A maneira mais simples de adicionar um anexo � utilizar a classe EmailAttachment que encapsular� o anexo. No exemplo abaixo, ser� criado e adicionado como anexo ao e-mail anteriormente criado, uma figura. // cria o anexo.
07/11/2006 02:36:00
Artigo - Boas Vindas a Christiano Vale
Boas Vindas a Christiano Vale
Christiano Rodarte Vale (christianovale@gmail.com), 26 anos, formado em Ci�ncia da Computa��o pela UNIFOR-MG, trabalho como Desenvolvedor de Componentes Web em uma empresa (iTrade � Tecnologia de Informa��o) que desenvolve solu��es para o setor de Agro-Neg�cio (www.itradeti.com.br) .
Tenho interesse em todas as �reas relacionadas � inform�tica e um interesse especial pela linguagem JAVA em todas as suas plataformas (JME, JSE, JEE).
Tenho experi�ncia com desenvolvimento de Sistemas Distribu�dos, Sistemas Web, e Sistemas Desktop.
Pretendo colaborar com o Portal no que diz respeito a publica��o de pequenos artigos, tutoriais e tamb�m no que for necess�rio e estiver dentro das possibilidades.
23/08/2006 16:45:00
Christiano Rodarte Vale (christianovale@gmail.com), 26 anos, formado em Ci�ncia da Computa��o pela UNIFOR-MG, trabalho como Desenvolvedor de Componentes Web em uma empresa (iTrade � Tecnologia de Informa��o) que desenvolve solu��es para o setor de Agro-Neg�cio (www.itradeti.com.br).