Criptografia

7 respostas
J
public void criptografa(String senha){
        try
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(senha.getBytes());
            byte[] msgGerada = md.digest();
            senhaCrip = new String(msgGerada);
           
            
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
    }

Ao final desse metodo, a String senha estará criptografada em senhaCrip. Como faço para descriptografar ??

valeu !!!

7 Respostas

thadeurc

Cara eu tenho um código com chave privada que eh bem simples… Segue abaixo:
Objetos necessários:

private static Cipher encrypter;

	private static Cipher decrypter;

	private static SecretKey secretKey;

	private static byte[] key;

Método para incialização:

private static void initialize() throws Exception {
		if (encrypter != null) {
			return;
		}

		key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };

		secretKey = new SecretKeySpec(key, "DES");

		encrypter = Cipher.getInstance("DES");

		decrypter = Cipher.getInstance("DES");

		encrypter.init(Cipher.ENCRYPT_MODE, secretKey);

		decrypter.init(Cipher.DECRYPT_MODE, secretKey);

	}

Criptografando:

private String encryptString(String clean) throws Exception {
		if (clean == null){
			return null;
		}

		byte[] utf8 = clean.getBytes("UTF8");

		byte[] crip = encrypter.doFinal(utf8);

		return new BASE64Encoder().encode(crip);
	}

Descriptografando:

private String decryptString(String crypted) throws Exception {
		if (crypted == null) {
			return null;
		}
		
		byte[] dec = new BASE64Decoder().decodeBuffer(crypted);

		byte[] utf8 = decrypter.doFinal(dec);

		return new String(utf8, "UTF8");
	}

O algoritmo eh de livre escolha (procure sobre JCE)

Luca

Olá

Você não vai descriptografar. Se você conseguir decriptografar com facilidade é porque escolheu uma função fraca. MessageDigest é um tipo especial de função de uma via só, é conhecida também por função hash.

É fácil de calcular porém é dificil de reverter e daí seu valor na criptografia. É usado como se fosse uma impressão digital da mensagem. Serve para verificar se uma mensagem foi modificada, se a mensagem vem de fonte autorizada ou prevenir que alguém negue que a mensagem seja sua.

O que se faz é comparar o valor criptografado, que é o resultado do MessageDigest, com um valor (também criptografado) que deve ser o esperado e assim verificar sua validade.

[]s
Luca

J

thadeurc, valeu cara !!! Bem legal esse codigo !!! Me explica so pq a necessidade do :

new BASE64Encoder().encode(crip)

valeu !!!

thadeurc

Este cara eh o responsável por gerar a String criptorafada/descriptografada usando os bytes q vc gerou.

Porém, se vc tiver mais curiosidade de uma olhada na api pois todas as classes são default de java…

[]´s

J

thadeurc:
Este cara eh o responsável por gerar a String criptorafada/descriptografada usando os bytes q vc gerou.

Porém, se vc tiver mais curiosidade de uma olhada na api pois todas as classes são default de java…

[]´s

Tem como eu deixar a chave privado com 128 bits ?? Acredito q no seu codigo ela está com 64 bits !!

valeu !!!

J

thadeurc:
Este cara eh o responsável por gerar a String criptorafada/descriptografada usando os bytes q vc gerou.

Porém, se vc tiver mais curiosidade de uma olhada na api pois todas as classes são default de java…

[]´s

Tem como eu deixar a chave privado com 128 bits ?? Acredito q no seu codigo ela está com 56 bits !!

valeu !!!

thadeurc

Então, da uma olhada neste link que eh a chave para suas dúvidas.

http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html
[]´s

Criado 21 de julho de 2005
Ultima resposta 22 de jul. de 2005
Respostas 7
Participantes 3