Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    • Por que escalar escrita é tão mais difícil do que escalar leitura?
    • MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples
    • Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Asp.net»C#»Introdução aos algoritmos de criptografia AES e DES com .NET

    Introdução aos algoritmos de criptografia AES e DES com .NET

    Jhonathan SoaresBy Jhonathan Soares22 de fevereiro de 20173 Mins Read C#
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Existem principalmente dois tipos de algoritmos que são utilizados para criptografia e descriptografia.

    Criptografia simétrica

    Neste tipo de criptografia, uma única chave é usada para criptografia e descriptografia. É mais rápido do que o outro, mas também tem alguns inconvenientes como chave única, que é usado para criptografia e descriptografia, então quando você criptografar os dados, você tem que fornecer a mesma chave para a descriptografia e se os dados são enviados através da rede, Então no final, onde decodificação aconteceu, também precisamos saber a mesma chave. Suponha que você tem um Serviço e está fazendo a criptografia / descriptografia da mensagem com uma chave e seus muitos clientes consomem esse Serviço, então você tem que fornecer a chave para o seu cliente também. Ele precisa de confiança de nível muito alto, como você está compartilhando sua chave, o que significa seu segredo.

    Criptografia assimétrica

    Vimos que a criptografia simétrica tem alguns problemas de segurança e confiança, então a criptografia assimétrica resolve esse problema. A criptografia assimétrica usa duas chaves para criptografia e descriptografia, onde uma chave é para criptografia e outra é para descriptografia. Criptografar mensagem por chave pública e descriptografar mensagem usando chave particular. A chave pública é usada somente para criptografia e não pode descriptografar a mensagem por chave pública, mas criptografia assimétrica é mais lenta do que outros. É muito lento, por isso não se encaixa bem para os grandes dados ainda mais do que 1kilobyte.

    Principalmente dois algoritmos são usados ​​para a criptografia assimétrica.

    1- RSA foi descrito pela primeira vez em 1978 por Ron Rivest, Adi Shamir e Leonard Adleman e foi nomeado em seu nome RSA, que significa Ron Rivest, Adi Shamir e Leonard Adleman

    2- DSA significa Digital Signature Algorithm.

     Neste artigo, veremos criptografia simétrica com algoritmos DES, 3DES e AES. Existem muitos algoritmos, que estão disponíveis para criptografia. Vou explicar três, que são DES, 3DES, AES.

    DES Data Encryption Standard

    É uma maneira tradicional antiga , que é usada para criptografia e descriptografia. Não é confiável e pode se quebrar facilmente. O tamanho da chave no DES é muito curto. Não é muito bom quando nossos dados viajam por redes.

    Código de criptografia

    public string EncryptData(string strData, string strKey)  
        {  
                byte[] key = { }; //Chave de criptografia
                byte[] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };  
                byte[] inputByteArray;   
          
                try  
                {  
                    key = Encoding.UTF8.GetBytes(strKey);  
                    // DESCryptoServiceProvider é a classe de criptografia em c#.  
                    DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();  
                    inputByteArray = Encoding.UTF8.GetBytes(strData);  
               MemoryStream Objmst = new MemoryStream();  
               CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateEncryptor(key, IV), CryptoStreamMode.Write);  
               Objcs.Write(inputByteArray, 0, inputByteArray.Length);  
               Objcs.FlushFinalBlock();  
          
                   return Convert.ToBase64String(Objmst.ToArray());// string  final
                }  
                catch (System.Exception ex)  
                {  
                   throw ex;  
                }  
        }   

    Código de descriptografia

        public string DecryptData(string strData, string strKey)  
            {  
                byte[] key = { };// chave   
                byte[] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };  
                byte[] inputByteArray = new byte[strData.Length];  
          
                try  
                {  
                    key = Encoding.UTF8.GetBytes(strKey);  
                    DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();  
                    inputByteArray = Convert.FromBase64String(strData);  
          
                    MemoryStream Objmst = new MemoryStream();  
                    CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateDecryptor(key, IV), CryptoStreamMode.Write);  
                    Objcs.Write(inputByteArray, 0, inputByteArray.Length);  
                    Objcs.FlushFinalBlock();  
          
                    Encoding encoding = Encoding.UTF8;  
                    return encoding.GetString(Objmst.ToArray());  
                }  
                catch (System.Exception ex)  
                {  
                    throw ex;  
                }  
            }   
            

    3DES – chamado Triple DES

    Como vimos, existem algumas questões relacionadas à segurança no algoritmo DES, então podemos dizer que, 3DES é uma versão atualizada do DES. No 3DES, eles também aumentam o tamanho da chave, que era muito curto em DES, porém cuido ao utilizá-lo quando seus dados trafegam via rede aberta.

    Padrão Avançado de Criptografia AES

    O Advanced Encryption Standard ou AES também é chamado de Rijndael cipher (meu favorito). AES suporta criptografia de 128, 192 e 256 bits, que pode ser determinada pelo tamanho da chave, o tamanho da chave de criptografia de 128 bits é de 16 bytes, a chave de criptografia de 192 bits é de 24 bytes eo tamanho da chave de criptografia de 256 bits é de 32 bytes. A AES Encryption oferece um bom desempenho e um bom nível de segurança. A criptografia AES é uma cifra simétrica e usa a mesma chave para criptografia e descriptografia.

    Código de criptografia

    string EncryptData(string textData, string Encryptionkey)  
        {  
                    RijndaelManaged objrij = new RijndaelManaged();  
                    //iniciar o modo de operação
                    objrij.Mode = CipherMode.CBC;  
                    //setar o padding de operação da string
                    objrij.Padding = PaddingMode.PKCS7;  
                    //setar o tamanho (em bits) da operação 
                    objrij.KeySize = 0x80;  
                    //setar o tamanho do bloco    
                    objrij.BlockSize = 0x80;  
                    //setar a chave de criptografia
                    byte[] passBytes = Encoding.UTF8.GetBytes(Encryptionkey);  
                    //setar o vetor de bytes de inicialização para criptografia
                    byte[] EncryptionkeyBytes = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };  
          
                    int len = passBytes.Length;  
                    if (len > EncryptionkeyBytes.Length)  
                    {  
                        len = EncryptionkeyBytes.Length;  
                    }  
                    Array.Copy(passBytes, EncryptionkeyBytes, len);  
          
                    objrij.Key = EncryptionkeyBytes;  
                    objrij.IV = EncryptionkeyBytes;  
          
                    //Cria uma chave simétrica
                    ICryptoTransform objtransform = objrij.CreateEncryptor();  
                    byte[] textDataByte = Encoding.UTF8.GetBytes(textData);  
                    //Converte para string e retorna
                    return Convert.ToBase64String(objtransform.TransformFinalBlock(textDataByte, 0, textDataByte.Length));  
         }   

    Código de descriptografia

        string DecryptData(string EncryptedText, string Encryptionkey)  
                {  
                    RijndaelManaged objrij = new RijndaelManaged();  
                    objrij.Mode = CipherMode.CBC;  
                    objrij.Padding = PaddingMode.PKCS7;  
          
                    objrij.KeySize = 0x80;  
                    objrij.BlockSize = 0x80;  
                    byte[] encryptedTextByte = Convert.FromBase64String(EncryptedText);  
                    byte[] passBytes = Encoding.UTF8.GetBytes(Encryptionkey);  
                    byte[] EncryptionkeyBytes = new byte[0x10];  
                    int len = passBytes.Length;  
                    if (len > EncryptionkeyBytes.Length)  
                    {  
                        len = EncryptionkeyBytes.Length;  
                    }  
                    Array.Copy(passBytes, EncryptionkeyBytes, len);  
                    objrij.Key = EncryptionkeyBytes;  
                    objrij.IV = EncryptionkeyBytes;  
                    byte[] TextByte = objrij.CreateDecryptor().TransformFinalBlock(encryptedTextByte, 0, encryptedTextByte.Length);  
                    return Encoding.UTF8.GetString(TextByte);  //irá retornar a string original descriptografada
                }   
                

    No próximos artigos irei explicar a criptografia assimétrica (RSA, DSA).

    Um grande abraço a todos!

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    O que é a Ecma e qual é sua relação com C#?

    C# Post do Leitor 29 de julho de 20247 Mins Read

    UUID vs ULID: comparação e exemplos em C#

    C# 19 de junho de 20245 Mins Read

    Entendendo o ObjectId no MongoDB

    C# NoSql 25 de maio de 20246 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    Categorias
    • Arquitetura (14)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (90)
      • NoSql (58)
      • Sql (38)
    • Boas práticas (29)
      • Gestão & Produtividade (1)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (1)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile