none
Criptografar e descriptogradar dados usando chaves de criptografia para usar em cookies RRS feed

  • Pergunta

  • Olá!

    Alguém pode me dizer, ou me mostrar um exemplo de código sobre como criptografar uma string nesse tipo de criptografia?

    1 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTM3MzA4NDEyMg9kFgJmD2QWAgIDD2QWAgIDDxYCHgdWaXNpYmxlaGRkMaPsx1UPvp/p6fq4OZjQiY5Iuks=" /> 

    achei essa criptografia bonita ^^ ..
    é que vou usar este tipo em cookies... quero criptografar e depois descriptografar.. sempre usando uma chave.

    isso pode reduzir o acesso ao banco de dados.. assim, menos recursos serão utilizados.

    já estive vendo sobre como criptografar e descriptografar aqui no msdn libraries e até em outros sites.. mas nao consegui deixar como acima.. e muito menos consegui descriptografar, nem usar uma chave

    seria melhor ainda se pudessem mandar um trexo, ou bloco de codigo..

    alguém pode me ajudar?

    Agradeço desde já.
    segunda-feira, 2 de fevereiro de 2009 22:26

Respostas

Todas as Respostas

  • Parece que deu um erro na postagem.. o exemplo que tentei postar anteriormente é esse:


    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 
    value="/wEPDwUKLTM3MzA4NDEyMg9kFgJmD2QWAgIDD2QWAgIDDxYCHgdWaXNpYmxlaGRkMaPsx1UPvp/p6fq4OZjQiY5Iuks=" />
    segunda-feira, 2 de fevereiro de 2009 22:28
  • Bryan,

    o ViewState não é criptografado, mas somente "embaralhado". Você até pode criptografar os dados de cookies, mas não sei se faz muito sentido: você estaria economizando acesso ao banco de dados, mas aumentaria o consumo de banda de rede utilizada pela aplicação (os cookies são trafegados quando acessamos as páginas de um site); assim, sua página ficaria mais pesada para ser carregada.

    Além disso, se a informação for sigilosa, o ideal é nem guardá-la em cookies, pois mesmo estando criptografado, corre-se o risco de alguém conseguir quebrar e descobrir o conteúdo.


    Ricardo Oneda
    http://oneda.mvps.org/blog

    segunda-feira, 2 de fevereiro de 2009 23:18
    Moderador
  • Olá Bryan,

    Como o Ricardo Oneda alertou, os valores da ViewState não são criptografados por padrão... Eles são apenas convertidos para Base64, e podem ser convertidos de volta para texto sem precisar de chave.

    Se você quiser fazer o mesmo - sabendo que os dados não estarão criptografados e poderão ser acessados por outras pessoas - basta converter o seu texto para um array de bytes, e utilizar o método ToBase64String da classe Convert:

     
        string texto = "Texto normal";  
     
        // Transforma o texto em um array de bytes  
        byte[] textoEmBytes = Encoding.Default.GetBytes(texto);  
     
        // Converte o texto em Base 64  
        string textoEmBase64 = Convert.ToBase64String(textoEmBytes);  
        // Resultado = VGV4dG8gbm9ybWFs  
     


    Para converter o texto em Base64 de volta para string, é só fazer o inverso, utilizando o método FromBase64String da classe Convert.

    ---

    O que você pode fazer, no entanto, é criptografar os seus dados, e DEPOIS converter para Base64, mas mesmo assim, como disse o Ricardo, não é uma boa idéia guardar informações confidenciais em Cookies, ainda que criptografados.

    De qualquer forma, algumas referências que podem ajudar:

    Como criptografar e descriptografar um arquivo usando o Visual C#
    http://support.microsoft.com/kb/307010/pt-br

    Criptografia com .NET
    http://gmirandamg.spaces.live.com/blog/cns!C1269A3C62CB8B42!427.entry


    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    terça-feira, 3 de fevereiro de 2009 00:32
    Moderador
  • Ricardo Oneda disse:

    Bryan,

    o ViewState não é criptografado, mas somente "embaralhado". Você até pode criptografar os dados de cookies, mas não sei se faz muito sentido: você estaria economizando acesso ao banco de dados, mas aumentaria o consumo de banda de rede utilizada pela aplicação (os cookies são trafegados quando acessamos as páginas de um site); assim, sua página ficaria mais pesada para ser carregada.

    Além disso, se a informação for sigilosa, o ideal é nem guardá-la em cookies, pois mesmo estando criptografado, corre-se o risco de alguém conseguir quebrar e descobrir o conteúdo.


    Ricardo Oneda
    http://oneda.mvps.org/blog



    Oi Ricardo, tudo bem?

    Obrigado pela resposta rápida.
    Interessante, eu não sabia disso, até pq o google utiliza esse "troço" ae em seus cookies.. achei que fosse seguro  (sabe.. coisa de iniciante :D).

    Obrigado pela ajuda.



    Caio Proiete [MCT] disse:

    Olá Bryan,

    Como o Ricardo Oneda alertou, os valores da ViewState não são criptografados por padrão... Eles são apenas convertidos para Base64, e podem ser convertidos de volta para texto sem precisar de chave.

    Se você quiser fazer o mesmo - sabendo que os dados não estarão criptografados e poderão ser acessados por outras pessoas - basta converter o seu texto para um array de bytes, e utilizar o método ToBase64String da classe Convert:

     
        string texto = "Texto normal";  
     
        // Transforma o texto em um array de bytes  
        byte[] textoEmBytes = Encoding.Default.GetBytes(texto);  
     
        // Converte o texto em Base 64  
        string textoEmBase64 = Convert.ToBase64String(textoEmBytes);  
        // Resultado = VGV4dG8gbm9ybWFs  
     


    Para converter o texto em Base64 de volta para string, é só fazer o inverso, utilizando o método FromBase64String da classe Convert.

    ---

    O que você pode fazer, no entanto, é criptografar os seus dados, e DEPOIS converter para Base64, mas mesmo assim, como disse o Ricardo, não é uma boa idéia guardar informações confidenciais em Cookies, ainda que criptografados.

    De qualquer forma, algumas referências que podem ajudar:

    Como criptografar e descriptografar um arquivo usando o Visual C#
    http://support.microsoft.com/kb/307010/pt-br

    Criptografia com .NET
    http://gmirandamg.spaces.live.com/blog/cns!C1269A3C62CB8B42!427.entry


    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com/



    Olá Caio, tudo bom?

    Obrigado à você também pela resposta rápida..
    Entendi... Na verdade não é tão sigiloso, queria só botar um "Logged" e "esconder" ele dentro do cookie..

    Mas estou imaginando, se eu colocar um random 1string e um random 1 numero em uma certa posição, atrapalharia pra desfazer esse processo nao é? a nao ser que a pessoa saiba em qual posição estão o "engana trouxa" hehe

    Pensei: assim que transformar em string, colocar uma letra aleatoria na posição 4 e um numero na posição 8 por exemplo, e antes de eu "descriptografar", eu apago esses dois caracteres..
    Vou testar isso aqui..

    Vou olhar os exemplos que você mandou..

    Obrigado.
    terça-feira, 3 de fevereiro de 2009 03:52
  • .Bryan disse:

    Mas estou imaginando, se eu colocar um random 1string e um random 1 numero em uma certa posição, atrapalharia pra desfazer esse processo nao é? a nao ser que a pessoa saiba em qual posição estão o "engana trouxa" hehe

    Olá Bryan,

    O que você descreveu é um "novo" algoritmo de criptografia inventado por você :).

    Ao invés de reinventar a roda, utilize um algoritmo mais seguro e que já exista no .NET Framework... E existem vários:

    System.Security.Cryptography Namespace
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.aspx

    DES Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.des.aspx

    RC2 Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.rc2.aspx

    Rijndael Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx

    TripleDES Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.tripledes.aspx

    MD5 Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.md5.aspx

    SHA1 Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.sha1.aspx

    SHA256 Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx

    SHA384 Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.sha384.aspx

    SHA512 Class
    http://msdn2.microsoft.com/en-us/library/system.security.cryptography.sha512.aspx


    Abraços,
    Caio Proiete


    Caio Proiete
    http://www.caioproiete.com/
    terça-feira, 3 de fevereiro de 2009 11:57
    Moderador
  • Mas olha esse código:

    1         string sKey = "xdserkou";  
    2  
    3         string Dados = TextBox1.Text;    
    4         string EncryptedValue;  
    5  
    6         Stream fsInput = Stream.Null;  
    7  
    8         StreamWriter fsInputWriter = new StreamWriter(fsInput);  
    9         fsInputWriter.Write(Dados);  
    10         fsInputWriter.Flush();  
    11  
    12         DESCryptoServiceProvider DES = new DESCryptoServiceProvider();  
    13         DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  
    14         DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  
    15  
    16         ICryptoTransform desencrypt = DES.CreateEncryptor();  
    17         CryptoStream cryptostream = new CryptoStream(fsInput, desencrypt, CryptoStreamMode.Read);  
    18  
    19         StreamReader StReader = new StreamReader(cryptostream);  
    20         EncryptedValue =  Convert.ToBase64String(Encoding.Default.GetBytes(StReader.ReadToEnd()));  
    21  
    22         cryptostream.Close();  
    23         fsInputWriter.Close();  
    24         fsInput.Close();  
    25  
    26         TextBox2.Text = EncryptedValue; 

    Pelo o que percebi, ele só criptografa a chave ou um valor nulo, e não a string.

    Por que isso acontece?
    quarta-feira, 4 de fevereiro de 2009 00:45
  • Olá!

    Esqueci de cumprimentar e de me despedir.. Tava empolgado com o codigo. fiquei umas 2 horas tentando fazê-lo funionar hehe

    Alguém ai pode ajudar?


    Obrigado
    quarta-feira, 4 de fevereiro de 2009 18:05
  • Olá Bryan,

    Sinceramente, não entendi o seu objetivo com esse código...

    Primeiro porque você nem chega a instanciar um Stream para poder escrever o código criptografado (o Stream.Null é um stream que não escreve em lugar algum... Você deveria utilizar um MemoryStream), depois porque você cria o CryptoStream em modo leitura (!?) e tenta ler os bytes com o StreamReader como se fosse texto???


    Você chegou a ler algum dos links que indiquei acima, na minha primeira resposta?? O primeiro link mostra um exemplo tão simples! É praticamente CTRL + C / CTRL + V :D.

    Abraços,
    Caio Proiete


    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 5 de fevereiro de 2009 00:48
    Moderador
  • Olá Caio,

    Po, eu vi todos os links que você me mandou sim.. só que em todos eles, quando há algum exemplo, mostram apenas como criptografar e/ou descriptografar um arquivo. E pra mim não serve porq ue eu peciso usar em cookies, em pequena quantidade.

    Até tentei modificar (o código acima derivou do seu 2º link hahaha, ficou igual um voodoo mas td bem..), como no codigo que mandei acima, que por sinal, eu tava fazendo um teste (tanto na parte de nao instanciar a stream, quanto na parte de criar o CryptoStream em modo leitura) e esqueci de voltar ele ao normal pra ae sim mandar pra cá.
    Quanto a parte de ler bytes com o StreamReader, é por que vou ter que transformar em string mesmo.. então tentei fazer dessa forma ai..

    Sou fraco em Streams, to começando nessa parte a pouco tempo (cerca de 1 ou duas semanas).

    A última coisa que fiz no código acima, foi criar o CryptoStream em modo de leitura.. sem sucesso, pedi a vocês pra me ajudarem. Por que essa foi a gota final desse codigo.. rsrs

    Dá uma força aí, só quero criptografar uma string, no máximo 200 caracteres. Duvido que passe disso. É pouca informação..
    Tenho que descriptografar depois. Por isso o MD5, SHA e tal não servem.

    Obrigado desde já.
    Abraços.
    "Da discussão nasce a luz."
    quinta-feira, 5 de fevereiro de 2009 02:16
  • Consegui :)

    O problema é que eu tinha que usar usings..

    Valeu ae pessoal!
    Obriado pela ajuda de todos.
    "Da discussão nasce a luz."
    quinta-feira, 5 de fevereiro de 2009 21:06