Tumgik
pjprog-blog-blog · 12 years
Text
Criptografando senhas...
Boa noite galera Java e Android!! Tudo bom com vocês??
Bom, primeiramente peço desculpas pela minha ausência de posts interessantes no blog, é que estava atrás de assuntos relevantes para nós, Java/Android programmers.  Então, é bom que saibam que não postarei todos os dias, mas quando postar, direi sobre assuntos realmente interessantes, ok?
Hoje falarei sobre criptografia de senhas...
Este é um assunto bastante polêmico, pois existe diversas criptografias dos mais diversos modos, mas grande parte já está quase em extinção ou já entraram, pois os hackers estão sempre criando novas maneiras de burlar essas criptografias e criando Hash Tables para quebrar senhas. Então, mesmo a criptografia que mostrarei agora, devemos tomar cuidado e conhecer profundamente para saber se é uma criptografia "segura".
Bom, vou mostrar uma codificação de encrypt de senhas baseado em Cipher, utilizando a criptografia PBE (Password-Based Encryption) com MD5 (conhecido por muitos, bastante utilizado) e DES (hash relativamente novo). Tem também a opção com TripleDES, ou seja, com triplo hash DES, para dificultar ainda mais o reconhecimento.
public static String encrypt(String texto) {   try {     PBEKeySpec pbeKeySpec;     PBEParameterSpec pbeParamSpec;     SecretKeyFactory keyFac;     // Salt     byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,  (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };     // Contador de iteração     int count = 20;     // Cria o parâmetro PBE     pbeParamSpec = new PBEParameterSpec(salt, count);     String password = "secret";     pbeKeySpec = new PBEKeySpec(password.toCharArray());     keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");     SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);     // Cria o Cipher PBE     Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");     // Inicializa Cipher PBE com chave e parâmetros     pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);     // Converte o texto em bytes     byte[] textoEmBytes = texto.getBytes();     // Encripta o texto, convertendo em Hexadecimal primeiramente     return paraStringHexa(pbeCipher.doFinal(textoEmBytes));   } catch (Exception e) {     e.printStackTrace();     return null;   } }
Bom galera, vocês viram que eu preferi não comentar detalhadamente cada linha, porque eu acho que o fundamental nesse código é sua funcionalidade, então, direi a vocês o que realmente ele faz, de maneira sucinta.
Criado os parâmetros chave para o encrypt (PBEKeySpec, PBEParameterSpec e SecretKeyFactory) e definido o salt que será utilizado, cria-se o parâmetro PBE baseado no salt e na quantidade de vezes que o salt será executado (count), depois instancia-se a chave secreta do encrypt, baseado na nossa criptografia PBE com MD5 e DES, além de um password utilizado para especificação da chave. Após gerar a chave secreta, cria-se um Cipher, que é o parâmetro principal para este tipo de criptografia, e inicia-se o mesmo, determinando seus parâmetros e a criptografia (Cipher.ENCRYPT_MODE). Pega-se, então, a senha que deseja ser criptografada e converte ela para uma Array de bytes, para criptografar byte a byte. E por último, criptografa a senha, convertendo estes bytes para Hexadecimal, com o método mostrado logo abaixo:
private static String paraStringHexa(byte[] bytes) {   StringBuilder s = new StringBuilder();   for (int i = 0; i < bytes.length; i++) {     int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;     int parteBaixa = bytes[i] & 0xf;     if (parteAlta == 0)       s.append('0');     s.append(Integer.toHexString(parteAlta | parteBaixa));   }   return s.toString(); }
Bom, este método puramente pega byte a byte e converte para Hexadecimal (quem teve aula de conversão binária, vai se familiarizar com o código). E por fim, retorna a String criptografada.
Este código também funciona em Android, já testei e dá certo...
E é só, galera! Sua senha estará criptografada, para dificultar o acesso a suas aplicações por hackers. Vou dar um exemplo de como fica:  Senha sem criptografia: PJProg Senha criptografada: 55f11aac4d3e65fc
Bom, espero que tenham gostado desse assunto e se aprofundem sobre ele. Quem quiser conhecer um pouco mais sobre criptografia em Java, vejam esse link:
http://docs.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html
Até a próxima, pessoal! =]
2 notes · View notes
pjprog-blog-blog · 12 years
Text
Certificação, aí vou eu...
Boa noite galera,
Hoje chegou meu livro de estudo para certificação SCJP, ouvi comentários muito legais sobre este livro chamado "Guia do Exame SCJP", do autor Camilo Lopes. A expectativa é a melhor possível, vou me dedicar ao máximo para me certificar. Porém, ainda tenho uma dúvida: não sei se primeiro faço o SCJA, que é o nível básico de certificação, ou faço o SCJP, que será o motivo de meus estudos.
Quem tiver alguma dica, estou ouvindo. ^^
Mas é isso aí, galera. Se eu ver algo interessante, irei postar aqui para todos verem, ok?
Até a próxima galera, torçam por mim e pelos meus estudos! =]
2 notes · View notes
pjprog-blog-blog · 12 years
Text
Comentem a vontade...
E ae galera, bom dia!!!
Agora eu implementei uma área de comentários em cada post, sintam-se a vontade para coment's e afins...
É isso ae galera, até mais! =]
0 notes
pjprog-blog-blog · 12 years
Video
youtube
Animando sua programação Parte I ...
E ae galera, boa noite a todos…
Hoje começarei uma área de descontração (ou não) do blog. E iniciarei com uma “saga” de músicas para animar sua programação.
Espero que curtem os vídeos/músicas que postarei aqui durante nossa caminhada.
E para iniciarmos, postarei uma música do glorioso Tony Hawk’s Pro Skater 3, do velho, mas sempre incrível PlayStation 1… Galera, eu ficava super animado jogando, só de ouvir essa música, e aí decidi levar ela para minha playlist de programação. Acreditem, a programação fica bem mais acelerada com ela, façam o teste. O nome dela é What’s the Matter Man, da banda Rollins Band. 
Até a próxima galera!! =]
0 notes
pjprog-blog-blog · 12 years
Text
Projetos no GitHub...
Opa galera,
Então, agora a aplicação básica que fiz com as video-aulas sobre Hibernate já está disponibilizada no GitHub.
A biblioteca completa do Hibernate 4, a versão mais atualizada, está junto do projeto.  E o jar do MySQL também está, além do SQL da tabela "cliente" utilizada como exemplo na aplicação.
Já adianto que todas as aplicações futuras que serão realizadas por video-aulas serão disponibilizadas para download nesse repositório do GitHub, ok?
O link do GitHub é:
https://github.com/brunovky/PJProg
Até mais! =]
2 notes · View notes
pjprog-blog-blog · 12 years
Video
vimeo
Hibernate na Prática - Parte III
0 notes
pjprog-blog-blog · 12 years
Video
vimeo
Hibernate na Prática - Parte II
0 notes
pjprog-blog-blog · 12 years
Video
vimeo
Hibernate na Prática - Parte I
0 notes
pjprog-blog-blog · 12 years
Text
Hibernate na prática...
Bom galera, boa noite a todos,
No último post, mostrei como configura o Hibernate Tools no Eclipse e quais os jars necessários do Hibernate para começar a projetar suas primeiras aplicações.
Agora, fiz uma video-aula mostrando uma aplicação básica feita com esta framework. Esta video-aula está dividida em 3 partes, o qual a 2ª e a 3ª na verdade são 1 video apenas, mas dividi pela metade, porque ficou muito grande.
Espero que gostem pessoal. Qualquer dúvida, é só comentar aqui e eu responderei assim que possível.
Ah! E assim que eu conseguir, vou colocar essa aplicação básica de teste no Github, para que todos tenham acesso, ok?
É isso aí, até a próxima!! =]
0 notes
pjprog-blog-blog · 12 years
Text
Hibernate na veia...
Boa noite galera,
Estou eu aqui para falar pra vocês sobre o Hibernate, uma framework para mapeamento objeto-relacional em Java. Particularmente, tenho um carinho especial por ela, pois desde quando aprendi a utilizá-la, uso frequentemente em minhas aplicações, até mesmo testes...
Inicialmente mostrarei como instalar o seu plugin para Eclipse e onde baixar os jars para uso do Hibernate corretamente.
Bom, para instalar o Hibernate Tools, que é uma ferramenta para criar mais facilmente os arquivos de configuração da framework, deve-se abrir o Eclipse, ir na guia Help e escolher a opção Install New Software.
Abrirá uma janela para indicar quais itens serão instalados. No campo Work with digite o link: http://download.jboss.org/jbosstools/updates/development/. Aparecerá alguns plugins para instalação, então selecione apenas o JBoss Data Services, que conterá o plugin Hibernate Tools. Dê Next, espere o cálculo de requerimentos, aparecerá outra janela, dê Next novamente, escolha a opção I accept the terms of the license agreement.
Começará a instalação do Hibernate Tools. Caso apareça uma janela durante o percurso, apenas dê OK, após a instalação o Eclipse pedirá para que seja reiniciado. Então escolha Restart Now.
Pronto! O Hibernate Tools estará instalado no seu Eclipse.
Por fim, baixe os jars necessários para a codificação do Hibernate/JPA. Basta entrar nesse link: http://sourceforge.net/projects/hibernate/files/hibernate4/4.1.4.Final/hibernate-release-4.1.4.Final.zip/download. Os jars necessários são os das pastas:
lib/jpa
lib/required 
Apenas isso, galera. Então você já está pronto para usar o Hibernate em suas aplicações. No próximo post começarei as video-aulas sobre o uso dessa framework em uma aplicação simples, utilizando o padrão DAO (Data Access Object).
Até mais, pessoal! =]
3 notes · View notes
pjprog-blog-blog · 12 years
Text
Manipulando arquivos...
E aí galera, olha eu aqui de novo...
Dessa vez falarei sobre manipulação de arquivos e diretórios, ler e escrever em arquivos texto. Esse código pode parecer simples, mas é importantíssimo para a vida de um Java Programmer. E vou mostrar alguns passos legais para isso.
Criando diretórios e arquivos
Para essa criação, a classe java.io.File é essencial. Com ela, manipulamos diversas coisas se tratando de diretórios e arquivos. O código realmente é tranquilo:
import java.io.File; //Instancia uma classe File, passando como parâmetro o local e o nome do diretório que será criado File diretorio = new File("C:\\TesteDiretorio"); //Cria o diretório indicado, retorna um boolean boolean status = diretorio.mkdir();
O diretório já está criado, então agora iremos criar um arquivo .txt nesse diretório. Para isso precisamos tomar cuidado com o try/catch:
import java.io.File; //Indica o nome do arquivo que será criado e em qual diretório File arquivo = new File(diretorio, "arquivo1.txt"); try {     //Cria o arquivo indicado         arquivo.createNewFile(); } catch (IOException ex) {     //mensagem de erro... } 
Escrevendo arquivos .txt
Para escrita de arquivos, utilizamos a classe java.io.PrintWriter e a java.io.FileWriter.
import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; 
try {     //Primeiro, cria-se um FileWriter para manipular o arquivo indicado.     //OBS: O 2º parâmetro do tipo boolean pergunta se o conteúdo do arquivo     será apagado antes de escrever. False apagaria o conteúdo.     FileWriter fw = new FileWriter (arquivo, false);     //Depois, cria um PrintWriter para escrita no arquivo     PrintWriter pw = new PrintWriter(fw);     //Usa-se o método println() para escrever, porém há outras possibilidades de escrita, como o append() e write(). Conheça sua estrutura pela documentação da classe.     pw.println("Bruno Henrique");     pw.println("19 anos");     pw.println("Java Programmer");   //Por fim, usa-se flush() para liberar a escrita da memória e o close() para fechar o arquivo     pw.flush();     pw.close();  } catch (IOException ex) {     //mensagem de erro... }
Lendo arquivos .txt 
Para leitura de arquivos, usa-se a java.io.BufferedReader e java.io.FileReader.
try {     //Primeiro, cria-se uma FileReader para manipular o arquivo     FileReader fr = new FileReader(arquivo);     //Depois, cria-se uma BufferedReader para leitura do arquivo     BufferedReader br = new BufferedReader(fr);     //Então, cria-se uma String para receber cada linha do arquivo     String linha = "";     //Iteramos sobre cada linha que não for nula     while ((linha = br.readLine()) != null) {         System.out.println(linha);     }     //Por fim, fecha-se o BufferedReader e o FileReader     fr.close();     br.close(); } catch (IOException ex) {     //mensagem de erro... }
Bom galera, está bem básico, mas é o suficiente para ler e escrever arquivos .txt tranquilamente, inclusive arquivos .csv também. Qualquer dúvida, podem comentar aqui ou no Twitter. Agradecendo ao Marcio Ballem, o qual tem um Wordpress explicando um pouco mais a fundo esses códigos.
http://mballem.wordpress.com/2011/03/21/manipulando-arquivo-txt-com-java/
Até a próxima! =] 
2 notes · View notes
pjprog-blog-blog · 12 years
Text
Agradecimento especial...
Boa noite pessoal,
Ontem cometi um equívoco no post do Scrum, esqueci de agradecer a uma pessoa importantíssima para esta minha compreensão sobre a metodologia se tornar prática, o meu chefe Alexandre.
Ele é muito determinado a fazer o time se tornar entrosado no Scrum, fato essencial para o desenvolvimento da framework, mas que se torna complexo pelas variáveis dela. E ele de maneira exemplar, mostra-se um grande Scrum Master, apesar do pouco tempo que tem para se dedicar a isso.
Então fica aqui meu agradecimento especial ao Alexandre pela sua determinação ao nos ajudar a conhecer essa metodologia tão importante para nossa área.
Obrigado!! =]
3 notes · View notes
pjprog-blog-blog · 12 years
Text
Framework de respeito...
E aí galera, tudo beleza?
Alguém já ouviu falar da metodologia Scrum?
Confesso, é bastante complexo, porém, uma vez implantada na empresa, é de extrema importância para a divisão de tarefas e "passos" para execução final de um produto para o time de desenvolvimento.
Eu também confesso que não conheço todas as variáveis dessa metodologia, mas posso tentar introduzir um pouco sobre o assunto, que, se bem estudado, pode causar uma amplitude dos negócios de maneira extraordinária.
Bom, vamos lá:
Scrum é um framework de gerenciamentos de projetos. O conceito básico do Scrum é a divisão em Sprints, que é o período onde se ocorre as tarefas (incrementos) para um determinado fim, que deve levar algo real e valoroso para o negócio. Então, cria-se uma lista de itens que se deseja ao software, seja alterações ou novos componentes para o projeto, dando a devida prioridade a cada item e sua divisão pelos Sprints, essa lista por Sprint se dá o nome de Sprint Backlog, e a lista por completo se chama Product Backlog, ambos definidos pelo Product Owner. Durante o processo das Sprints, ocorre-se reuniões diárias entre o time de desenvolvimento, para planejamento das tarefas de cada dia. Esta reunião é realizada apenas entre os desenvolvedores, ou seja, o Scrum Master não participa, pois a intenção não é cobrança, e sim apenas planejamento. Tal reunião se chama Scrum Daily Meeting. O ponto máximo da Scrum Daily é a resposta de 3 perguntas:
O que eu fiz ontem?
O que farei hoje?
Que obstáculos tive?
Após cada Sprint concluida, se faz uma reunião com o próprio cliente ou responsável por responder pelo projeto, se dá o nome de Sprint Review, onde se definirá se o Sprint atingiu a meta proposta. Outra reunião importante se dá nesse período após a conclusão de um Sprint, é o Sprint Retrospective que aponta o que funcionou bem no Sprint e o que deve ser melhorado.
As pessoas cruciais no Scrum são:
Product Owner - é o representante do cliente, o interessado no investimento do produto, ou seja, o cara que conhece todo o negócio e suas variáveis.
Scrum Master - é o orientador principal do Time Scrum, quem coordena os desenvolvedores, para identificar se o Scrum está devidamente planejado e praticado.
Team - é o time de desenvolvedores, responsáveis por transformar o Product Backlog em Sprint Backlog e fazer a "ideia virar software pronto", são diretamente responsáveis por controlar as tarefas do desenvolvimento do Sprint.
Bom, é isso aí, explicado de uma maneira direta e introdutória. Obviamente essa framework é muito mais abrangente do que esses termos citados, então precisa estar em constante pesquisa, para que funcione eficazmente.
Espero que tenham entendido dessa minha forma, e expandem essa metodologia aos quatro cantos, pois muitas empresas precisam de uma métrica de tamanha complexidade como o Scrum, fazendo os lucros aumentarem e a organização de tarefas se organizarem.
Agradeço ao Luiz Aguiar, pela sua postagem no Wordpress dele, vou deixar o link aqui para que conheçam e tirem dúvidas, afinal ele é CEO, e conhece bem essa framework.
http://laguiar.wordpress.com/2008/06/30/introducao-scrum/
Até a próxima!! =]
9 notes · View notes
pjprog-blog-blog · 12 years
Text
Consulte aleatoriamente...
Opa galera,
Para iniciar a noite, quero comentar sobre o blog do meu amor, a Lais Renata... ^^
Ela tem um blog super interessante sobre diversos assuntos "aleatórios", que vem para criticar um pouco desse mundo louco em que vivemos, além de dar boas risadas sobre coisas que nunca imaginaríamos pensar. É muito legal, galera!
Deem uma olhada lá e comentem sobre o que achou, ok?
http://missial127.tumblr.com/
O nome do blog se chama "Um Estranho Mundo Aleatório de Missial".
Espero que gostem e até mais!! =]
2 notes · View notes
pjprog-blog-blog · 12 years
Text
Mamão com açúcar para Javeiros...
Olá de novo galera.
Sabe aqueles momentos que você tem vontade de jogar tudo para o alto e largar o Java só porque percebeu que precisa fazer 20 validações em um único formulário de cadastro de clientes, perguntando ao sistema se o usuário digitou algo no campo de nome, telefone, cpf, etc...?
Então, "seus problemas acabaram"! Lembrando o velho e querido "Casseta e Planeta". Há um certo tempo, existe uma biblioteca chamada Google Guava (não me perguntem o porquê desse nome... Ou o cara gosta muito de goiaba, ou ele tentou escrever Java e saiu bem errado), a qual facilita imensamente diversas tarefas usuais do programador, com códigos úteis e fáceis de implantar conforme sua necessidade.
Vou citar dois exemplos aqui para vocês constatarem a facilidade:
Voltando a esse caso das validações... Caso você precisasse escrever uma validação de nome, para identificar se o usuário digitou algo no campo de texto, você teria que fazer mais ou menos isso:
if (!txNome.getText().equals("") && txNome.getText() != null) {      //faça isso... } else {     //mensagem de erro... }
Com o Guava, você reduziria esse código a esse:
if (Strings.isNullOrEmpty(txNome.getText())) {      //mensagem de erro... } else {     //deu certo! continua o código... }
Mamão com açúcar, não é? Agora outra facilidade muito boa do Guava é para ler todas as linhas de um arquivo, com essa biblioteca, você fará isso em UMA LINHA:
List<String> linhas = Files.readLines(arquivo, charset);
Mais facilidade que isso é difícil, hein? Galera que quer aprender essa "mordomia", estudem a documentação dela e baixem agora mesmo para testar.
http://code.google.com/p/guava-libraries/ >> Download do Guava
http://docs.guava-libraries.googlecode.com/git/javadoc/index.html >> Documentação completa
Até a próxima! =]
4 notes · View notes
pjprog-blog-blog · 12 years
Text
Go go TDC 2012...
Boa noite galera,
Esse post será bem curto, apenas para falar um pouco sobre esse big evento chamado "The Developers Conference".
Pessoal, tem evento de monte lá! Sobre as mais diversas tecnologias e linguagens, inclusive algumas sobre a área administrativa. Bem legal!
Como o blog trata sobre Java e Android, vou colocar apenas as palestras que haverão dessas tecnologias. Porém, são muitas palestras, então vou passar o link de cada dia, ok?
Bom, vamos lá:
O TDC 2012 será de 4 a 8 de julho... Java terá nos dias:
04/07 (quarta) - http://www.thedevelopersconference.com.br/tdc/2012/saopaulo/trilha-java-university#programacao
05/07 (quinta) - http://www.thedevelopersconference.com.br/tdc/2012/saopaulo/trilha-javaee-university#programacao (será JavaEE)
06/07 (sexta) - http://www.thedevelopersconference.com.br/tdc/2012/saopaulo/trilha-javaee#programacao (também será JavaEE)
07/07 (sábado) - http://www.thedevelopersconference.com.br/tdc/2012/saopaulo/trilha-java#programacao
E Android terá nos dias:
04/07 (quarta) - http://www.thedevelopersconference.com.br/tdc/2012/saopaulo/trilha-android-university#programacao
05/07 (quinta) - http://www.thedevelopersconference.com.br/tdc/2012/saopaulo/trilha-android#programacao
É isso ae, serão diversos assuntos na área. Se quiser, pode comprar o webcast para poder assistir em sua casa. Pesquisem no site que vou deixar aqui e esclareçam todas as dúvidas que tiverem. Galera, é um big evento mesmo! Da Globalcode! Ou seja, será super importante para os programadores/desenvolvedores de diversas áreas.
Fica a dica a todos. Deixo agora aqui o link do site oficial do evento:
http://www.thedevelopersconference.com.br/
Abraço a todos e até a próxima! =]
1 note · View note
pjprog-blog-blog · 12 years
Text
Vamos do início...
Caraca, vou começar a semana com gripe e tosse, pelo visto. Nem acredito.
Acabando meu primeiro semestre na faculdade, pelo andar da carruagem fui em quase todas as matérias. Sim, eu disse quase. Provavelmente, ficarei em recuperação em "matemática discreta". Então, é a primeira dica que dou a todos que pensam em fazer Análise e Desenvolvimento de Sistemas: sim, você precisa aprender matemática lógica, e já adianto, é bem complexa, pelo menos para mim. Aquele tal de grafos, regras de inferência, e o famoso e temido PIF... Nossa é um pior que o outro. Então já sei que nessas férias de meio do ano, vou ter que abrir um tempinho nos meus estudos "programáticos" para estudar um pouco de matemática e essas variáveis loucas. Fazer o quê, né?
No meu trabalho, eu programo sistemas de gestão comercial em Java (apesar de por enquanto não ter pego nenhum projeto oficial) e "nas horas vagas" estudo desenvolvimento de jogos em Android, com a ferramenta AndEngine. Galera, é muito show! Porém, tem um grande problema em estudar essa engine: ainda não tem nenhum ótimo tutorial sobre ele, já achei vários tutoriais na internet, mas nenhum bem aprofundado, e cada um dos que eu achei ensinava de maneira diferente, e com codificação diferente, com outros imports, isso complica muito no estudo. Se alguém souber de algum livro, apostila ou um bom tutorial sobre a AndEngine, e quiser postar aqui, agradeceria muito.
Bom, quem nunca ouviu falar da AndEngine e quiser aprender um pouco mais sobre ele, vou deixar o link, tem a documentação completa no Github do desenvolvedor da ferramenta: http://www.andengine.org/.
Boa semana a todos e fiquem com Deus galera! =]
2 notes · View notes