Guardar a key(Criptografia)

4 respostas
SadNess

galera
seguinte
eu preciso de um aplicativo que criptografe alguns dados e os insira no banco de dados, para serem descriptografados em uma consulta
Eu tenho o seguinte por enquanto:

package teste;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

import uteis.criptografia.CriptoUtils;

public class JCETeste	{

	public static void main(String[] args) throws Exception	{
		try	{	
			//obtem a chave
			KeyGenerator keyGen = KeyGenerator.getInstance("DES");
			SecretKey desKey = keyGen.generateKey();
			
			//inicializa o cipher para criptografar
			Cipher desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
			desCipher.init(Cipher.ENCRYPT_MODE, desKey);
			//texto a ser criptografado
			byte[] clearText = "Isto é apenas um exemplo!".getBytes();
			//criptografar o texto
			byte[] cipherText = desCipher.doFinal(clearText);

			//inicializa o cipher para descriptografar
			desCipher.init(Cipher.DECRYPT_MODE, desKey);
			//descriptografa o texto
			byte[] clearText1 = desCipher.doFinal(cipherText);

		}
		catch(NoSuchPaddingException nspe)	{
			nspe.printStackTrace();
		}
		catch(NoSuchAlgorithmException nsae)	{
			nsae.printStackTrace();
		}
		catch(IllegalBlockSizeException ibse)	{
			ibse.printStackTrace();
		}
		catch(BadPaddingException bpe)	{
			bpe.printStackTrace();
		}
		catch(InvalidKeyException ike)	{
			ike.printStackTrace();
		}
		catch(Exception e)	{
			e.printStackTrace();
		}
	}
}

meu problema é:
A cada vez o sistema gera uma chave diferente, assim é impossível pra mim descriptografar os dados do banco em uma consulta
Como eu faço pra guardar uma key, para que mais tarde eu use a mesma key para descriptografar os dados do banco?

4 Respostas

danieldestro

http://www.guj.com.br/posts/list/11229.java
http://javaalmanac.com/egs/java.security/GetKeyFromKs.html?l=rel

SadNess

valeu pela ajuda daniel
dei uma olhada rápida nos links e já deu pra perceber que vou apanhar :cry:

danieldestro

Outro link: http://www.informit.com/articles/article.asp?p=407886&rl=1

No caso, você está gerando uma nova chave a cada execução, por isso não funciona.

Você terá que criar uma chave utilizando uma ferramenta do java e recuperar essa chave de dentro do arquivo que você criou.

Tinha um programinha legal pra criar essa chave em disco: Keytool GUI, mas não acho mais o site.

O

A rigor, se for utilizado uma keystore com keytool, voce vai ter uma chave publica e privada e terá que usar um algoritmo assimetrico (RSA, DSA) para criptografar e descriptografar.

Para armazenar chaves simetricas em arquivos, geralmente se utiliza um algoritmo PBE (Password-Based Encryption).

Uma solução mais simples no seu caso para não utlizar um arquivo externo é armazenar a chave no proprio codigo como uma String representando a chave em base64. Vai ficar hard-coded, mas pelo menos não tem que se preocupar com um arquivo externo protegido por senha.

Criado 9 de agosto de 2006
Ultima resposta 9 de ago. de 2006
Respostas 4
Participantes 3