none
Criptografia em WPF RRS feed

  • Pergunta

  • Pessoal estou no meu primeiro projeto em WPF usando Visual Stduio 2010, Entity Framework no .NET Framework 4.0 e ai estou com dificuldades em usar criptografia(anteriormente no framework 3.0 usava SHA1 ou MD 5) mas no VS2010 não reconhece algumas classes, o que vocês me recomendam tem algum artigo ou exemplo para eu em basear?

    Obrigado.

    Segie a classe que usava anteriormente no Framework 3.0

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web.Security;
    using System.Web.Configuration;
    using System.Security.Cryptography;
    using System.IO; 
    
    namespace IASD.Core.Util
    {
      public class Criptografia
      {
        public static string HashSHA1(string Password)
        {
          return FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "SHA1");
        }
        public static string HashMD5(string Password)
        {
          return FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "MD5");
        }
    
    
        private static byte[] chave = { };
        private static byte[] iv = { 12, 34, 56, 78, 90, 102, 114, 126 };
    
        public static string Criptografar(string valor, string chaveCriptografia)
        {
          DESCryptoServiceProvider des;
          MemoryStream ms;
          CryptoStream cs; byte[] input;
          try
          {
            des = new DESCryptoServiceProvider();
            ms = new MemoryStream();
    
            input = Encoding.UTF8.GetBytes(valor); chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));
            cs = new CryptoStream(ms, des.CreateEncryptor(chave, iv), CryptoStreamMode.Write);
            cs.Write(input, 0, input.Length);
            cs.FlushFinalBlock();
    
            return Convert.ToBase64String(ms.ToArray());
          }
          catch (Exception ex)
          {
            throw ex;
          }
        }
    
        public static string Descriptografar(string valor, string chaveCriptografia)
        {
          DESCryptoServiceProvider des;
          MemoryStream ms;
          CryptoStream cs; byte[] input;
    
          try
          {
            des = new DESCryptoServiceProvider();
            ms = new MemoryStream();
    
            input = new byte[valor.Length];
            input = Convert.FromBase64String(valor.Replace(" ", "+"));
    
            chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));
    
            cs = new CryptoStream(ms, des.CreateDecryptor(chave, iv), CryptoStreamMode.Write);
            cs.Write(input, 0, input.Length);
            cs.FlushFinalBlock();
    
            return Encoding.UTF8.GetString(ms.ToArray());
          }
          catch (Exception ex)
          {
            throw ex;
          }
        }
    
    
      }
    }
    
    
    sexta-feira, 27 de agosto de 2010 12:02

Respostas

  • Moizés,

    Você pode usar as funções de Hash do Core da .NET framework, veja este exemplo:

     public string EncodeMD5Password(string originalPassword)
     {
      Byte[] originalBytes;
      Byte[] encodedBytes;
      MD5 md5;
    
      // instancia o MD5CryptoServiceProvider, e transforma a password em byte[] para calcular o hash
      md5 = new MD5CryptoServiceProvider();
      originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
      encodedBytes = md5.ComputeHash(originalBytes);
    
      // converte o hash em string
      return BitConverter.ToString(encodedBytes);
     }
    
     public string EncodeSH1Password(string originalPassword)
     {
      Byte[] originalBytes;
      Byte[] encodedBytes;
      SHA1 sh1;
    
      // instancia o MD5CryptoServiceProvider, e transforma a password em byte[] para calcular o hash
      sh1 = new SHA1CryptoServiceProvider();
      originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
      encodedBytes = sh1.ComputeHash(originalBytes);
    
      // converte o hash em string
      return BitConverter.ToString(encodedBytes);
     }
    

    At., 


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    sexta-feira, 27 de agosto de 2010 12:15

Todas as Respostas

  • Moizés,

    Você pode usar as funções de Hash do Core da .NET framework, veja este exemplo:

     public string EncodeMD5Password(string originalPassword)
     {
      Byte[] originalBytes;
      Byte[] encodedBytes;
      MD5 md5;
    
      // instancia o MD5CryptoServiceProvider, e transforma a password em byte[] para calcular o hash
      md5 = new MD5CryptoServiceProvider();
      originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
      encodedBytes = md5.ComputeHash(originalBytes);
    
      // converte o hash em string
      return BitConverter.ToString(encodedBytes);
     }
    
     public string EncodeSH1Password(string originalPassword)
     {
      Byte[] originalBytes;
      Byte[] encodedBytes;
      SHA1 sh1;
    
      // instancia o MD5CryptoServiceProvider, e transforma a password em byte[] para calcular o hash
      sh1 = new SHA1CryptoServiceProvider();
      originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
      encodedBytes = sh1.ComputeHash(originalBytes);
    
      // converte o hash em string
      return BitConverter.ToString(encodedBytes);
     }
    

    At., 


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    sexta-feira, 27 de agosto de 2010 12:15
  • QUal classe vc usa no framework 4.0?

     

    segunda-feira, 30 de agosto de 2010 12:26
  • Moizés,

    Você vai usar as mesmas classes da Framework 2 que passei no meu Post. Não há diferença.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    segunda-feira, 30 de agosto de 2010 12:32
  • Porém as seguintes clases não são recnhecidas no 4.0:

    using System.Web.Security;
    using System.Web.Configuration;

     

    segunda-feira, 30 de agosto de 2010 13:08
  • Você não precisa usar estes Namespaces para fazer a criptografia não...

    Você vai usar as classes do Namespace System.Security.Cryptography.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    segunda-feira, 30 de agosto de 2010 13:14
  • Valew cara obrigado, vou iniciar os teste no sistema.
    segunda-feira, 30 de agosto de 2010 13:16
  • Móizés estou utilizando TrypleDes e MD5 que utiliza o namespace System.Security.Cryptography;

    aqui vai exemplo de como crypt./decrypt. utilizando uma chave de segurança(key):

        public static byte[] Encryption(string senha, string key)
        {
          TripleDES des = CreateDES(key);
          ICryptoTransform ct = des.CreateEncryptor();
          byte[] input = Encoding.Unicode.GetBytes(senha);
          return ct.TransformFinalBlock(input, 0, input.Length);
        }
    
        public static string Decryption(byte[] b, string key)
        {
          TripleDES des = CreateDES(key);
          ICryptoTransform ct = des.CreateDecryptor();
          byte[] output = ct.TransformFinalBlock(b, 0, b.Length);
          return Encoding.Unicode.GetString(output);
        }
    
        static TripleDES CreateDES(string key)
        {
          MD5 md5 = new MD5CryptoServiceProvider();
          TripleDES des = new TripleDESCryptoServiceProvider();
          des.Key = md5.ComputeHash(Encoding.Unicode.GetBytes(key));
          des.IV = new byte[des.BlockSize / 8];
          return des;
        }
    
    

     no exemplo você chama o método passando o que você quer encryptar e a senha, que vai ser utilizada para decriptar o hash posteriormente, como parâmetros.. 

    tenta ae!

    abraço.

    terça-feira, 31 de agosto de 2010 02:46