Criptografia é algo muito comum nos sistemas atuais. Quando falamos de segurança, o termo criptografia normalmente está presente.
Este post tem como objetivo apresentar a API de criptografia já presente na liguagem java, mais precisamente no pacote java.security.
Existem basicamente dois tipos de algoritmos de criptografia:
- Os de duas vias (aquele em que é possível descriptografar)
- Os de uma via (os que não há como descriptografar, pois o o cálculo matemático efetuado não permite, a partir do valor fim, retornar ao valor inicial).
Os algoritmos de uma via podem ser chamados de Message Digests, e são extremamente eficientes para armazenamento de senhas – e são estas funções que veremos neste post.
Message Digest
A API do Java implementa dois algoritmos de Message Digest:
Em java, temos uma classe MessageDigest que implementa estes algoritmos. Para termos uma instância desta classe, devemos proceder da seguinte forma:
//message digest para MD5
MessageDigest md = MessageDigest.getInstance("MD5");
//message digest para SHA
MessageDigest md = MessageDigest.getInstance("SHA-1");
Após selecionar o algoritmo desejado (passando através do método getInstance), podemos proceder da seguinte forma para criptografar uma String:
String s = "senha aqui";
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update( s.getBytes() );
byte[] hash = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
if ((0xff & hash[i]) < 0x10)
hexString.append( "0" + Integer.toHexString((0xFF & hash[i])));
else
hexString.append(Integer.toHexString(0xFF & hash[i]));
}
String criptografado = hexString.toString();
Claro que devemos tratar devidamente as exceções (como por exemplo NoSuchAlgorithmException), mas no grosso é o código acima mesmo:
O método update() recebe o que deve ser critografado (em array de bytes) e o método digest() efetua a criptografia, retornando um array de bytes.
O for percorre os bytes e vai pegando os seus valores e convertendo para String – concatenando os valores com a classe StringBuilder.
Bom, finalizo aqui um exemplo básico de criptografia com MessageDigest.
Quanto a criptografia de duas vias, tem um ótimo post no Blog do Ricardo Giaviti. Segue abaixo o link:
http://www.ricardogiaviti.com.br/2010/07/usando-criptografia-em-java/
Espero ter ajudado!
Abraço