Olá
Construi um algoritmo para criptografia e descriptografia de dados. Existem dados que devem ser criptografados mas quando eu precisar deles eu preciso descriptografalos. Quando eu criptografo um dado eu consigo pegar a chave usada porém, quando eu vou reutilizar a chave as vezes ele não consegue fazer a descriptografia correta.
O codigo é o seguinte:import java.security.*;
import javax.crypto.*;
public class Class {
private static SecretKey desKey = null;
private static byte[] key = null;
public static SecretKey getKeyGen(){
if(desKey==null){
KeyGenerator keygen=null;
try {
keygen = KeyGenerator.getInstance("DES");
desKey = keygen.generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return desKey;
}
return desKey;
}
public static String encripta(String dado) throws GeneralSecurityException{
Cipher enCipher;
// Criando o Cipher
enCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
//Iniciando o cipher
enCipher.init(Cipher.WRAP_MODE, Class.getKeyGen());
key = enCipher.wrap(Class.getKeyGen()); //Guardando a chave
enCipher.init(Cipher.ENCRYPT_MODE, Class.getKeyGen());
/*Byte do dado a ser criptografado*/
byte[] dados = dado.getBytes();
/*O dado já criptografado*/
byte[] dadoEncriptado = enCipher.doFinal(dados);
return new String(dadoEncriptado);
}
public static String decriptaECB(String dadoEncriptado) throws GeneralSecurityException{
Cipher desCipher;
// Criando o Cipher
desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// Os dados criptografados para descriptografar
byte[] dadoDescriptografado = dadoEncriptado.getBytes();
// Inicializando o cipher e pegando a minha chave para descripografar
desCipher.init(Cipher.UNWRAP_MODE,Class.getKeyGen());
desCipher.init(Cipher.DECRYPT_MODE,desCipher.unwrap(key,"DES",Cipher.SECRET_KEY));
// Descriptografando
byte[] cleartext1 = desCipher.doFinal(dadoDescriptografado);
return new String(cleartext1);
}
public static void main(String args[]){
String dado = "Minha informação";
String en = null;
String des = null;
System.out.println("String antes: "+dado);
try {
en = Class.encripta(dado);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
System.out.println("String criptografada: "+en);
try {
des = Class.decriptaECB(en);
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("String Descriptografada: "+des);
}
}
Se você rodar o codigo muitas vezes algumas vezes ele vai conseguir descriptografar corretamente.
Alguem ai da uma luz?