Criptografia DES com chave privada em java compativel com o delphi

Pessoal estou desenvolvendo uma rotina de criptografia em java usando o algoritmo de codigo aberto DES.
O meu problema é o seguinte:
Preciso ler um codigo criptografado em delphi e descriptografalo, essa criptografia é a DES, mas não to conseguindo
obter resultado igual no java.
Exemplo:
tenho minha cheve privada = minhachaveprivada
meu texto a ser criptografado = Secreto
e preciso que me retorne o codigo emcriptado = Yab3AnukkE8=
mas ta me retornando outros valores não compativeis que estão no codigo que postei abaixo.
Se alguem puder me ajudar agradeço desde ja.

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package br.com.viasoft.bean;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

/**
*

  • @author Wolmir
    */
    public class criptografia {

    static Cipher ecipher;
    static Cipher dcipher;

    //inicia os objetos
    public static void inicializa(SecretKey key) {  
       try {  
          ecipher = Cipher.getInstance("DES");  
          dcipher = Cipher.getInstance("DES");  
          ecipher.init(Cipher.ENCRYPT_MODE, key);  
          dcipher.init(Cipher.DECRYPT_MODE, key);  
        } catch (javax.crypto.NoSuchPaddingException e) {  
        } catch (java.security.NoSuchAlgorithmException e) {  
        } catch (java.security.InvalidKeyException e) {  
        }  
    

    }

    //Encriptar Testo apartir da chave privada
    public static String encrypt(String str, SecretKey key) {
    try {

       byte[] iso = str.getBytes("ISO-8859-1"); // Codifica o String como ISO88591
    
       // criptografa
       byte[] enc = ecipher.doFinal(iso);
    
       // Retorna um string com o encode base64
       return new sun.misc.BASE64Encoder().encode(enc);
     } catch (javax.crypto.BadPaddingException e) {
     } catch (IllegalBlockSizeException e) {
     } catch (UnsupportedEncodingException e) {
     } catch (java.io.IOException e) {
     }
     return null;
    

    }

    //Decripta testo apartir da chave privada
    public static String decrypt(String str, SecretKey key) {
    try {

       // Decodifica o string em bytes
       byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
    
       // descriptografa
       byte[] iso = dcipher.doFinal(dec);
    
       // Retorna o string em utf8
       return new String(iso, "ISO-8859-1");
     } catch (javax.crypto.BadPaddingException e) {
     } catch (IllegalBlockSizeException e) {
     } catch (UnsupportedEncodingException e) {
     } catch (java.io.IOException e) {
     }
     return null;
    

    }

    //Gerar a chave apartir dew um texto
    private static SecretKey convertPasswordToKey (final String password) throws InvalidKeyException, UnsupportedEncodingException {
    SecretKey skey = null;
    try {

            //01
            //SecretKeyFactory skf1 = SecretKeyFactory.getInstance("DES");   
            //DESKeySpec ks1 = new DESKeySpec (password.getBytes("ISO-8859-1"));  
            // E aqui temos o resultado final, que é a chave secreta.  
            //skey = skf1.generateSecret (ks1); 
            
            
            //02 
            //usando array de bits
            //skey = new SecretKeySpec(password.getBytes("ISO-8859-1"), "DES"); 
            
            
            //03
            SecretKeyFactory skf3 = SecretKeyFactory.getInstance("DES");  
            PBEParameterSpec ps3 = new PBEParameterSpec (new byte[]{3,1,4,1,5,9,2,6}, 20);  
            PBEKeySpec ks3 = new PBEKeySpec (password.toCharArray()); // esta é a chave que você quer manter secreta.  
            // Obviamente quando você for implantar na sua empresa, use alguma outra coisa - por exemplo,  
            // "05Bc5hswRWpwp1sew+MSoHcj28rQ0MK8". Nao use caracteres especiais (como ç) para nao dar problemas.  
            skey = skf3.generateSecret (ks3);  
            
        } catch (java.security.NoSuchAlgorithmException ex) {    
            ex.printStackTrace();    
        } catch (java.security.spec.InvalidKeySpecException ex) {    
           ex.printStackTrace();    
        }    
        return skey;
    }    
    

    public static void main(String[] args) throws InvalidKeyException, UnsupportedEncodingException {
    //texto a ser encriptado
    String textoProtegido = “Secreto”;
    //chave usada na encriptação
    String chavePrivada = “minhachaveprivada”;

       //chama o metodo para iniciar  
       criptografia.inicializa(convertPasswordToKey(chavePrivada)); 
       
       String textoCriptografado = criptografia.encrypt(textoProtegido, convertPasswordToKey(chavePrivada));
       System.out.println(textoCriptografado);
       
       String textoDescriptografado = criptografia.decrypt(textoCriptografado, convertPasswordToKey(chavePrivada));
       System.out.println(textoDescriptografado);
    

    }

    /*
    No sistema que esta rodando
    Delphi = O texto Secreto com a senha minhachaveprivada gera a criptografia Yab3AnukkE8=
    No metodo que criei no java gera usando metodo 1 e 2 p72Xo9XKTqs= com a mesma chave. *0e0jdTbt3srALEh
    */
    }

Olá wolmirgarbinPJ!

Percebi que voce resolveu este empasse entre java e delphi, quanto a criptografia. Estou tendo o mesmo problema que o seu, preciso que o valor cripto seja descriptografado, tanto no delphi quanto em Java, e até agora não consegui nenhuma forma, para os valores serem idênticos.

O que voce fez?

Quais criptografias voces me recomendam, pra trabalhar em ambos os sistemas paralelo.

Obrigado