Metodo de criptografar

16 respostas
R

Pessoal,

Alguém conhece algum metodo de criptografar uma String, onde eu passo a String "RAFAEL", ela retorne "@#$%¨&" e quando passe "@#$%¨&" ela me retorne "RAFAEL"?

Obrigado

16 Respostas

C

Tem que ser exatamente essa criptografia???

V

Deve ter no minimo umas 10 combinações diferentes de algoritmos no Java pra vc fazer isso! :grin:

dê uma olhada em JavaTM Cryptography Extension (JCE)

R

Tem como garantir que na String que se gere não apareça o “|” ?

V

q diferença faz?

q tipo de criptografia vc qr usar? chegaste a ler o link q mandei?

R

Cheguei sim, mas não todo.

Atraves dele vi que existe na API do java um pacote para fazer isso.

Eu usarei isso para envar dados via web, so que são varios dados onde separo por exemplo com “|”, e esse caracter eu num quero que o cripty use como parte da sua rotina.

Texto Original : RAFAEL + “|” + SANTOS+ “|”+SILVA
Texto Crip: @#$%|SDF#%|SDF%%

Eu irei criptografar cada uma das string e depois juntá-las separando por “|”.

so que se o metodo usar o | vai deixar confuso a minha rotina de quebrar essa string.

V

pq vc não junta tudo e encripta depois?

pq vc não coloca esses dados num XML e encripta o XML?

enviar pela web significa que vc vai encriptar usando uma aplicação Java Desktop, colher a saída criptografada e informá-la em um campo de um formulário na web? explique melhor esse processo…

ahh, se vc for trafegar (com stream) dados pela rede é importante codificá-los em Base64 antes de enviá-los para que o protocolo não se confunda com os “caracteres baixos” gerados no texto cifrado.

R

É melhor fazer o que você disse, cirptografar tudo, assim fica melhor.
Pq qdo o outro pto receber os dados, vai ter os “|” para separa os dados.

Mas o que é esse Base64?

Vc teria um classe com um exemplo de dois metodos que encripta e descripta?

Obrigado pela ajuda.

V

naquele link q eu te passei e na API da classe Cipher tem alguns exemplos de como cifrar/decifrar dados.

Base64 é a codificação usada para transportar dados binários por protocolos de rede que utilizam caracteres baixos como caracteres de controle. Por exemplo, quando vc manda um anexo num email ele é codificado em base64 e enviado em texto plano junto com a mensagem.

a SUN disponibiliza as classes sun.misc.BASE64Encoder e BASE64Decoder para codificar estes dados (mas se vc estiver enviando através de um formulário Web o browser já converte pra ti)

R

Hum… Estou entendendo…

O que eu to fazendo é que dois dispositivos se comuniquem usando o HTTP.

Isso seria necessário converter em Base64?

Obrigado

V

sim, se vc estah fazendo aplicaçoes q se comunicam sobre TCP ou HTTP é importante que os dados sejam codificados em base64

R

Tava lendo o link que vc me mandou mais meu ingles é fraco :sad:

Tem como vc me fazer uma favor, vc tem um classe com dois medotos, um para crip e ou para descrip, nesse caso usando o Base64.

Futuramente vo me aprofundar nisso.

Vls…
Obrigado.

V
Cara, não posso te dar o código q eu fiz pois é propriedade da empresa que trabalho, mas aí vai alguma coisa q pode te guiar:
Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");

Key chave = KeyGenerator.getInstance("DES/CBC/PKCS5Padding").generateKey();

c.init(Cipher.ENCRYPT_MODE, chave); // encripta
//c.init(Cipher.DECRYPT_MODE, chave); // decripta

decData = c.doFinal(data);
no mais veja a API do java no pacote javax.crypto.*
R

Hum…

peguei o que vc me mandou e apartir disso tava vendo.
Tentei fazer o seguinte, mas ocorreu um erro:

Unexpected exception

java.security.NoSuchAlgorithmException: DES/CBC/PKCS5Padding KeyGenerator not av

ailable

at javax.crypto.KeyGenerator.<init>(DashoA12275)

at javax.crypto.KeyGenerator.getInstance(DashoA12275)

at MyProg2.main(MyProg2.java:17)
try &#123;
        System.out.println&#40;"Hello, world"&#41;;

        Cipher c = Cipher.getInstance&#40;"DES/CBC/PKCS5Padding"&#41;;

       &#91;b&#93; Key chave = KeyGenerator.getInstance&#40;"DES/CBC/PKCS5Padding"&#41;.generateKey&#40;&#41;; &#91;/b&#93;

        c.init&#40;Cipher.ENCRYPT_MODE, chave&#41;; // encripta
        //c.init&#40;Cipher.DECRYPT_MODE, chave&#41;; // decripta

        System.out.println&#40;"e = " + new String&#40;c.doFinal&#40;"Rafael".getBytes&#40;&#41;&#41;&#41;&#41;;

        &#125;
        catch &#40;Exception e&#41; &#123;
            System.out.println&#40;"Unexpected exception"&#41;;
            e.printStackTrace&#40;&#41;;
        &#125;
        finally &#123;&#125;

O ero foi na linha em negrito, so que eu vi o Appendix A: Standard Names, no Key que tem lá e num vi conflito.

O que houve?
Isso num ta nd em Base64, né?

Obrigado, vls mesmo pela ajuda.[/b]

A

Olá pessoal, eu queria saber se tem algum algoritmo dessa API que não usa a lógica de chave. Ou então eu puder indicar qual será a minha chave (se tem um método tipo assim: setKey(“teste”)).

Vlw

A

Pq esses códigos dão erro algumas vezes e dão certo outras?

Seu código funcionou assim:

/*
 * TesteCript2.java
 *
 * Created on 5 de Agosto de 2005, 14&#58;39
 */
import java.security.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import java.security.spec.*;
import javax.crypto.*;
import java.io.*;
/**
 *
 * @author  HALISSON
 */
public class TesteCript2 &#123;
    
    /** Creates a new instance of TesteCript2 */
    public TesteCript2&#40;&#41; &#123;
    &#125;
    
    /**
     * @param args the command line arguments
     */
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        // TODO code application logic here
        try &#123; 
            System.out.println&#40;"Hello, world"&#41;; 

            Cipher c = Cipher.getInstance&#40;"DES"&#41;; 

            Key chave = KeyGenerator.getInstance&#40;"DES"&#41;.generateKey&#40;&#41;; 

            c.init&#40;Cipher.ENCRYPT_MODE, chave&#41;; // encripta 
            //c.init&#40;Cipher.DECRYPT_MODE, chave&#41;; // decripta 
            String enc=new String&#40;c.doFinal&#40;"Rafael".getBytes&#40;&#41;&#41;&#41;;
            System.out.println&#40;"e = " + enc&#41;; 
            
            c.init&#40;Cipher.DECRYPT_MODE, chave&#41;; // decripta 
            String dec=new String&#40;c.doFinal&#40;enc.getBytes&#40;&#41;&#41;&#41;;
            System.out.println&#40;"e = " + dec&#41;; 
        &#125;catch &#40;Exception e&#41;&#123; 
            System.out.println&#40;"Unexpected exception"&#41;; 
            e.printStackTrace&#40;&#41;; 
        &#125; 

    &#125;
    
&#125;
V

o funcionamento dos algoritmos depende da versão do Java instalado na máquina em q o sistema roda, não são todos algoritmos q estão implementados ainda.

esse código abaixo usa chave fixa e é o máximo q eu posso ajudar com código pronto, a partir disso vcs tem q fuçar na API e descobrir como funciona (naqueles links q passei tem tudo!)
public static byte&#91;&#93; encriptaSimetrico&#40;byte&#91;&#93; data, char&#91;&#93; key&#41; &#123;
        byte&#91;&#93; encData = null;
        String alg = &quot;PBEWithMD5AndDES&quot;;
        try &#123;
            PBEKeySpec pbeKeySpec;
            PBEParameterSpec pbeParamSpec;
            SecretKeyFactory keyFac;

            pbeParamSpec = new PBEParameterSpec&#40;salt, count&#41;;

            pbeKeySpec = new PBEKeySpec&#40;pad&#40;key&#41;&#41;;
            keyFac = SecretKeyFactory.getInstance&#40;alg&#41;;
            SecretKey pbeKey = keyFac.generateSecret&#40;pbeKeySpec&#41;;

            Cipher pbeCipher = Cipher.getInstance&#40;alg&#41;;

            pbeCipher.init&#40;Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec&#41;;

            encData = pbeCipher.doFinal&#40;data&#41;;
        &#125; catch &#40;Exception e&#41; &#123;
            e.printStackTrace&#40;&#41;;
        &#125;
        return encData;
    &#125;
salt é um byte[] e count é um int
Criado 3 de agosto de 2005
Ultima resposta 8 de ago. de 2005
Respostas 16
Participantes 4