Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    • Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis
    • A Anatomia de um Prompt: Como Falar com a IA Como um Profissional de Tecnologia
    • Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais
    • Cache além do básico: por que LRU e TTL precisam andar juntos
    • Quando usar arquitetura modular — e quando não usar
    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
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    • Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis
    • A Anatomia de um Prompt: Como Falar com a IA Como um Profissional de Tecnologia
    Categorias
    • Arquitetura (31)
      • Microsserviços (3)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (93)
      • NoSql (60)
      • Sql (38)
    • Boas práticas (34)
      • Gestão & Produtividade (4)
      • Metodologias Ágeis (6)
    • Cursos (53)
    • Dicas (108)
    • Front-End (92)
    • IA (7)
    • 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

    Código Simples no Facebook
    Código Simples no Facebook
    • Popular
    • Recente

    1000 livros gratuitos sobre programação!

    12 de fevereiro de 2016

    Google lança versão “invisível” do reCAPTCHA!

    10 de março de 2017

    Mini curso de HTML5 oferecido pela Microsoft

    30 de janeiro de 2014

    O que significa ( !important ) na declaração do CSS ?

    5 de fevereiro de 2014

    Programa para supercompactar arquivos. KGB Archiver.

    6 de fevereiro de 2014

    Context engineering: quando o problema deixa de ser prompt e vira arquitetura

    16 de abril de 2026

    Clean Code (2ª edição): o que mudou e o que continua valendo

    12 de fevereiro de 2026

    Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha

    4 de fevereiro de 2026

    Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis

    30 de outubro de 2025

    A Anatomia de um Prompt: Como Falar com a IA Como um Profissional de Tecnologia

    30 de outubro de 2025
    Nosso Feed
    • RSS - Posts
    Fique por dentro

    Digite seu endereço de email para assinar este blog e receber notificações de novas publicações por email.

    Facebook X (Twitter) Instagram LinkedIn

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

    Vá para versão mobile