Criptografia TripleDES

Bom Dia,
galera!!!

Estou com o seguinte problema, estou construindo um serviço em java, que chamara um Web Service em .NET, e preciso passar como parâmetros para o .NET uma senha criptografada, no entando quando utilizo algoritmos de criptografia 3DES existentes na internet, nenhum está encriptando do mesmo modo que o framework padrão do .NET encripta, desse modo o resultado do WS .NET é que a senha esta incorreta.
Algum de vocês saberiam um algoritmo que eu coloque a mesma chave e IV que utilizei no .NET e ele retorna a encriptação correta? Já tiveram esse problema e sabem a solução?

Obrigado
Vitor

Sua pergunta é bem difícil de responder sem conhecer os detalhes técnicos da implementação .NET. A criptografia Triple DES em si é padronizada, o que muitos implementadores fazem é incluir algumas especificidades. Por exemplo, a forma de “salgar” a cifra, ou como preencher os blocos de dados que não conseguem ocupar os segmentos de tamanho fixo (512 bytes, por exemplo). Talvez o link abaixo lhe ajude com a implementação de Triple DES em Java?

http://www.java2s.com/Code/Java/Security/TripleDES.htm

O problema que tenho é que não conheço o código .NET, é um sistema pronto, feito por uma outra equipe que não é a minha na empresa, e o único dado que eles me disponibilizaram é a chave que eles utilizaram para codificação e o IV. O artigo que você postou já o conheço o problema é que o mesmo gera uma chave própia e guarda num arquivo, e no meu caso eu tenho já essa chaves de criptografia em String.

tem que confrontar as duas documentações.

[s]

Vlw galera, consegui encontrar um código aqui que fizesse funcionar.

posta ai o código =]
abrcs

Ta ae o código

Classe Encrypter:


import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * Class that supplies a criptography of triple type DES.
 * @author vmachado
 * @since 05/07/2009
 */
public class Encrypter {

    private String key;
    private String initializationVector;

    public Encrypter(String key, String initializationVector) {
        this.key = key;
        this.initializationVector = initializationVector;
    }

    public String encrypt(String plainText) throws Exception {        
        byte[] plaintext = plainText.getBytes();
        byte[] tdesKeyData = key.getBytes();
        byte[] myIV = initializationVector.getBytes();

        Cipher c3des = Cipher.getInstance("DESede/CBC/PKCS5Padding");
        SecretKeySpec myKey = new SecretKeySpec(tdesKeyData, "DESede");
        IvParameterSpec ivspec = new IvParameterSpec(myIV);

        c3des.init(Cipher.ENCRYPT_MODE, myKey, ivspec);
        byte[] cipherText = c3des.doFinal(plaintext);

        return Base64Coder.encodeString(new String(cipherText));
    }

    public String decrypt(String cipherText) throws Exception {
        byte[] encData = Base64Coder.decodeLines(cipherText);
        byte[] tdesKeyData = key.getBytes();

        Cipher c3des = Cipher.getInstance("DESede/CBC/PKCS5Padding");
        SecretKeySpec myKey = new SecretKeySpec(tdesKeyData, "DESede");
        IvParameterSpec ivspec = new IvParameterSpec(initializationVector.getBytes());

        c3des.init(Cipher.DECRYPT_MODE, myKey, ivspec);
        byte[] plainText = c3des.doFinal(encData);

        return new String(plainText);
    }
}

Boa tarde a todos, desculpem ressucitar o topico, mas ja revirei todo o forum e boa parte do google, mas nunca trabalhei com criptografia, e logo de cara peguei uma missao de gerar uma api utilitaria para criptografar senhas e decriptografar simulando 3DES.
É o seguinte, esta simulacao consiste em criptografar um texto x de 16bytes, com uma chave de 32 bytes, no primeiro passo eu devo criptografar este texto transformado em 8bytes usando a primeira parte da chave de 32 tambem em 8 bytes, usando DES, ate ai tudo bem, funcionou perfeitamente, porem no segundo passo eu devo decifrar este texto com a segunda parte da chave transformada num array de 8bytes, e ae que esta o problema, eu nao consigo decifrar este texto se eu usar uma chave diferente(no caso a segunda parte da chave de 32), nao sei se me fiz entender, mas se alguem puder ajudar…
Obs:. Nao sou tao leigo em Java, possuo certificacao e tal, mas nunca fiz nada de criptografia.

Desde ja, muito obrigado