Criptografia DES  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

Olá pessoal,

preciso urgente realizar uma criptografia DES em java...achei o seguinte exemplo:



mas o problema é q eu preciso passar uma chave privada, em hexa e aqui eu nao tenho esta opcao, e eu nao achei como passar uma chave criada por mim no lugar de KeyGenerator.getInstance("DES").generateKey();

vlew...abraços.

This message was edited 1 time. Last update was at 04/12/2008 18:50:58

[Email]
andre.conde
What is classpath?

Membro desde: 28/11/2008 16:43:02
Mensagens: 8
Localização: SBC
Offline

Opa, tente isto para criar sua chave:

SecretKey key2 = new SecretKeySpec(arrayByte, "DES");

Até mais
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

ok, ele aceitou, mas aceita somente uma cheve de 8 digitos...achei estranho, ou devo estar informando de uma maneira errada...pq preciso informar uma chave hexa...por exemplo : 5446615264454F49.
[Email]
andre.conde
What is classpath?

Membro desde: 28/11/2008 16:43:02
Mensagens: 8
Localização: SBC
Offline

Posta como você está fazendo agora.
andre.conde
What is classpath?

Membro desde: 28/11/2008 16:43:02
Mensagens: 8
Localização: SBC
Offline

new SecretKeySpec(key.getBytes(), "DES");

Já tentou ?
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

Lá vai...se a chave for de 8 digitos funciona, mas com essa nao funciona



obrigado.
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você precisa pegar sua chave, que está em uma string hexadecimal de 16 caracteres, e transformá-la em um array de bytes de 8 bytes.

Isso é só uma coisa braçal e acho que é fácil você fazer isso com substring e Integer.parseInt.

Por exemplo, você pode usar ((byte) Integer.parseInt ("4F", 16)) para obter o byte 0x4F.
[WWW]
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

thingol,

tem algo errado...veja se estou correto, eu teria q converter o seu exemplo assim :

byte[] teste = (byte) Integer.parseInt ("4F", 16);


?
[Email]
andre.conde
What is classpath?

Membro desde: 28/11/2008 16:43:02
Mensagens: 8
Localização: SBC
Offline

Em vez de try catch, joga a excessao pra cima, com throws, para pelo menos você ver o que está acontecendo no seu código. A Excessao do seu código é esta:

Exception in thread "main" java.security.InvalidKeyException: Invalid key length: 16 bytes
at com.sun.crypto.provider.DESCipher.engineGetKeySize(DashoA6275)
at javax.crypto.Cipher.b(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.a(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at javax.crypto.Cipher.init(DashoA12275)
at pacote1.CryptoEx1.<init>(CryptoEx1.java:22)
at pacote1.CryptoEx1.main(CryptoEx1.java:71)

Ele não está aceitando uma chave privada de 16 bytes.
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

tap_pedroso wrote:thingol,

tem algo errado...veja se estou correto, eu teria q converter o seu exemplo assim :

byte[] teste = (byte) Integer.parseInt ("4F", 16);


?


Não é bem isso, a dica que lhe dei é para converter apenas um dos bytes; não todos, que acho que você consegue codificar um loop. É por isso que eu falei em "substring" e disse quantos bytes tem de ter o array de bytes.


[WWW]
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

sim, eu entendi o que vc quis dizer, mas antes eu tentei converter somente 1 valor hexa desta maneira que escrevi para ver o retorno e se nao acontecia nenhum erro.
[Email]
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

thingol, veja se vc consegue me dar um ultimo help...tentei colocar os valores da chave hexa dentro do array de bytes, mas ele entra no array como decimal, nao estou conseguindo chegar ao valor correto...eu tenho feito em delphi uma aplicação que faz o DES e funciona legal...o valor em texto claro é 9626000715612011, a chave é 5446615264454F49, e o valor cifrado com DES é 0146423EE2145003...em java o retorno nao bate nunca...vou posta o codigo que estou passando para o array de bytes e o codigo completo...muito obrigado pela força.

Tentando passar a chave hexa para um array de byte



codigo completo

[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você sabe qual é o "modo" usado no Delphi? Provavelmente é ECB, e não CBC como você está usando por default.

Você teria de especificar, em vez de simplesmente DES, "DES/ECB/NoPadding".

http://java.sun.com/javase/6/docs/api/javax/crypto/Cipher.html
[WWW]
tap_pedroso
JavaBaby

Membro desde: 11/06/2008 12:38:26
Mensagens: 90
Offline

ok, vou dar uma olhada aqui...mas o codigo para montar o array de bytes era isso mesmo?
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Acho que sim.
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team