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
            }  

Fonte: https://codigosimples.net/2017/02/22/introducao-aos-algoritmos-de-criptografia-aes-e-des-com-net/

2 Thoughts on “Criptografia AES e DES com .NET

  1. Testei aqui não descriptograva com Visual Studio 2008

Deixe um comentário para SoftNil-Sistemas Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Post Navigation