Método de criptografia e descriptografia que funcione! (Resolvido)  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Pilantra
JavaEvangelist
[Avatar]

Membro desde: 25/01/2005 03:29:00
Mensagens: 394
Localização: Maringá - PR
Offline

E ae pessoal.

Eu tenho um arquivo XML que guarda as informações para conexão com o banco de dados. Mas como o XML é super inseguro, pensei em criptografar pelo menos a senha que está na tag <senha />. Procurei na net e achei uma classe que faz isso, usando DES. Fiz um teste e funcionou perfeitamente como eu queria. Fiz outro teste gravando no XML a senha criptografada e funcionou. Mas quando eu quero descriptografar ela, retorna o seguinte erro:

javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at classes.Kriptonita.decriptar(Kriptonita.java:92)
at gui.Configuracoes.<init>(Configuracoes.java:55)
at gui.Principal.btConfigActionPerformed(Principal.java:265)
at gui.Principal.access$300(Principal.java:1
at gui.Principal$4.actionPerformed(Principal.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:231
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:603
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:205
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:16
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


Pesquisei em tudo que é lugar e não encontrei uma solução eficaz. Alguém sabe como resolver isso ou tem algum algoritmo de criptografia e descriptografia eficaz?

Segue a classe que eu adaptei:



Agradeço muito a ajuda de vocês.

Abraços.

This message was edited 2 times. Last update was at 23/10/2007 12:50:20


Gosta de Linux e Java? Acesse: http://andersonajx.blogspot.com
[WWW] [MSN]
thingol
Moderador

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

Quando você usa "DES" na verdade está usando "DES/ECB/NoPadding" se não me engano. Nesse caso pode dar problemas se a entrada não for um múltiplo de 8 bytes.

Tente com "DES/CBC/PKCS7Padding" (cuidado porque a saída é sempre um múltiplo de 8 bytes (ou é o tamanho original, acrescentado de 8), e você tem de estar preparado para isso.
Se sua entrada tiver 7 bytes, o resultado criptografado tem 8, e se sua entrada tiver 8 bytes, o resultado criptografado tem 16.

Dica: procure aqui no fórum um programa que escrevi que usa "PBEWithMD5AndDES". Ele permite criptografia com senha e já deixa o resultado codificado bonitinho em Base-64.

This message was edited 1 time. Last update was at 23/10/2007 10:34:15

[WWW]
Pilantra
JavaEvangelist
[Avatar]

Membro desde: 25/01/2005 03:29:00
Mensagens: 394
Localização: Maringá - PR
Offline

Humm, eu mudei o construtor e quando eu peço para Salvar, me da esse erro:

java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/CBC/PKCS7Padding
at javax.crypto.Cipher.getInstance(DashoA13*..)
at classes.Kriptonita.<init>(Kriptonita.java:33)
at gui.Configuracoes.<init>(Configuracoes.java:46)
at gui.Principal.btConfigActionPerformed(Principal.java:265)
at gui.Principal.access$300(Principal.java:1
at gui.Principal$4.actionPerformed(Principal.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:231
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:603
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:205
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:16
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


Eu fiz o construtor assim:



O que está errado?

Gosta de Linux e Java? Acesse: http://andersonajx.blogspot.com
[WWW] [MSN]
thingol
Moderador

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

Desculpe, é "DES/CBC/PKCS5Padding". Não sei porque pus 7 em vez de 5.
[WWW]
Pilantra
JavaEvangelist
[Avatar]

Membro desde: 25/01/2005 03:29:00
Mensagens: 394
Localização: Maringá - PR
Offline

Valeu thingol, mas agora olha que estranho, está faltando parâmetros:



E o erro retorna:

java.security.InvalidKeyException: Parameters missing
at com.sun.crypto.provider.SunJCE_f.a(DashoA13*..)
at com.sun.crypto.provider.DESCipher.engineInit(DashoA13*..)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at classes.Kriptonita.<init>(Kriptonita.java:36)
at gui.Configuracoes.<init>(Configuracoes.java:46)
at gui.Principal.btConfigActionPerformed(Principal.java:265)
at gui.Principal.access$300(Principal.java:1
at gui.Principal$4.actionPerformed(Principal.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:231
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:603
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:205
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:16
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


Nossa, como é xarope isso hehehehehe. Eu não achei o seu programa. Você pode mandar pra mim por e-mail?

Gosta de Linux e Java? Acesse: http://andersonajx.blogspot.com
[WWW] [MSN]
thingol
Moderador

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

Vou postar de novo. Eu tinha feito para senhas de bancos de dados, mas serve também para o seu caso (que é um XML).

[WWW]
Pilantra
JavaEvangelist
[Avatar]

Membro desde: 25/01/2005 03:29:00
Mensagens: 394
Localização: Maringá - PR
Offline

Valeu thingol, já rodei o código, agora eu vou testar com meu XML, qualquer coisa eu posto aqui.

Obrigado pela força.

Abraços.

Gosta de Linux e Java? Acesse: http://andersonajx.blogspot.com
[WWW] [MSN]
Pilantra
JavaEvangelist
[Avatar]

Membro desde: 25/01/2005 03:29:00
Mensagens: 394
Localização: Maringá - PR
Offline

Pilantra wrote:Valeu thingol, já rodei o código, agora eu vou testar com meu XML, qualquer coisa eu posto aqui.

Obrigado pela força.

Abraços.


Nossa, funcionou perfeitamente cara. Muito obrigado mesmo, essa classe vale ouro hehehe...

Abraços.

Gosta de Linux e Java? Acesse: http://andersonajx.blogspot.com
[WWW] [MSN]
vm
Thread.start()

Membro desde: 29/12/2006 19:49:36
Mensagens: 49
Offline

Pilantra

Valeu pela dica. Me poupou umas horas para desenvolver.

Valeu mesmo

Desenvolvedor J2EE / J2ME
michelvalent@gmail.com
[Email] [Yahoo!] [MSN]
ricardocomp
GUJ Ranger
[Avatar]

Membro desde: 05/03/2008 09:59:06
Mensagens: 764
Offline

Olá Galera,
eu sei q este
tópico já está off,
mas thingol era essa
a classe q eu precisava,
mas estou com algumas
dúvidas pq na linha 13 vc fla:
// para simplificar o exemplo. Use alguma outra classe para converter
base 64 é pq o algoritmo é de 64 bits?
[MSN]
thingol
Moderador

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

Base-64 é uma forma de codificação de dados binários.

http://pt.wikipedia.org/wiki/Base64
[WWW]
ricardocomp
GUJ Ranger
[Avatar]

Membro desde: 05/03/2008 09:59:06
Mensagens: 764
Offline

Jóia thingol,
Obrigado pela
ajuda, mas
na linha 13
o q vc quis dizer
com o comentário

mas no código eu já ñ uso a base-64 para criptografar?
Abraço.
[MSN]
Leandro Rocha
What is classpath?
[Avatar]

Membro desde: 07/12/2010 23:20:17
Mensagens: 9
Offline

thingol wrote:Vou postar de novo. Eu tinha feito para senhas de bancos de dados, mas serve também para o seu caso (que é um XML).



Olá...
thingol, muito boa essa classe ai para criptografia... ajudou muito cara.. obrigado...
Tenho dúvida com relação ao 'salt', eu sei pra que serve mas não sei como se implementa...
Só gostaria de saber se o tal do 'salt' (salto) está presente nessa classe ai que você implementou?
Caso essa classe não possua o 'salt' poderia me dar um exemplo de como implementar?
Desde já muito obrigado...

This message was edited 1 time. Last update was at 09/12/2010 13:41:10

[Yahoo!] [MSN]
Leandro Rocha
What is classpath?
[Avatar]

Membro desde: 07/12/2010 23:20:17
Mensagens: 9
Offline

????
[Yahoo!] [MSN]
Leandro Rocha
What is classpath?
[Avatar]

Membro desde: 07/12/2010 23:20:17
Mensagens: 9
Offline

Por favor... alguém??
[Yahoo!] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team