{"id":6270,"date":"2018-01-15T15:23:14","date_gmt":"2018-01-15T17:23:14","guid":{"rendered":"http:\/\/gianfratti.com\/?p=6270"},"modified":"2018-01-15T15:26:18","modified_gmt":"2018-01-15T17:26:18","slug":"criptografia-aes-e-des-com-net","status":"publish","type":"post","link":"http:\/\/gianfratti.com\/index.php\/criptografia-aes-e-des-com-net\/","title":{"rendered":"Criptografia AES e DES com .NET"},"content":{"rendered":"<p><span lang=\"pt\">Existem principalmente dois tipos de algoritmos que s\u00e3o utilizados para criptografia e descriptografia. <\/span><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">Criptografia sim\u00e9trica <\/span><\/strong><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">Neste tipo de criptografia, uma \u00fanica chave \u00e9 usada para criptografia e descriptografia. \u00c9 mais r\u00e1pido do que o outro, mas tamb\u00e9m tem alguns inconvenientes como chave \u00fanica, que \u00e9 usado para criptografia e descriptografia, ent\u00e3o quando voc\u00ea criptografar os dados, voc\u00ea tem que fornecer a mesma chave para a descriptografia e se os dados s\u00e3o enviados atrav\u00e9s da rede, Ent\u00e3o no final, onde decodifica\u00e7\u00e3o aconteceu, tamb\u00e9m precisamos saber a mesma chave. Suponha que voc\u00ea tem um Servi\u00e7o e est\u00e1 fazendo a criptografia \/ descriptografia da mensagem com uma chave e seus muitos clientes consomem esse Servi\u00e7o, ent\u00e3o voc\u00ea tem que fornecer a chave para o seu cliente tamb\u00e9m. Ele precisa de confian\u00e7a de n\u00edvel muito alto, como voc\u00ea est\u00e1 compartilhando sua chave, o que significa seu segredo. <\/span><!--more--><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">Criptografia assim\u00e9trica <\/span><\/strong><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">Vimos que a criptografia sim\u00e9trica tem alguns problemas de seguran\u00e7a e confian\u00e7a, ent\u00e3o a criptografia assim\u00e9trica resolve esse problema. A criptografia assim\u00e9trica usa duas chaves para criptografia e descriptografia, onde uma chave \u00e9 para criptografia e outra \u00e9 para descriptografia. Criptografar mensagem por chave p\u00fablica e descriptografar mensagem usando chave particular. A chave p\u00fablica \u00e9 usada somente para criptografia e n\u00e3o pode descriptografar a mensagem por chave p\u00fablica, mas criptografia assim\u00e9trica \u00e9 mais lenta do que outros. \u00c9 muito lento, por isso n\u00e3o se encaixa bem para os grandes dados ainda mais do que 1kilobyte.<\/span><\/p>\n<p id=\"tw-target-text\" class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">Principalmente dois algoritmos s\u00e3o usados \u200b\u200bpara a criptografia assim\u00e9trica. <\/span><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">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<\/span><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">2- DSA significa Digital Signature Algorithm. <\/span><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">\u00a0Neste artigo, veremos criptografia sim\u00e9trica com algoritmos DES, 3DES e AES. Existem muitos algoritmos, que est\u00e3o dispon\u00edveis para criptografia. Vou explicar tr\u00eas, que s\u00e3o DES, 3DES, AES. <\/span><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">DES Data Encryption Standard<\/span><\/strong><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">\u00c9 uma maneira tradicional antiga , que \u00e9 usada para criptografia e descriptografia. N\u00e3o \u00e9 confi\u00e1vel e pode se quebrar facilmente. O tamanho da chave no DES \u00e9 muito curto. N\u00e3o \u00e9 muito bom quando nossos dados viajam por redes.<\/span><\/p>\n<p id=\"tw-target-text\" class=\"tw-data-text tw-ta tw-text-medium\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">C\u00f3digo de criptografia<\/span><\/strong><\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n\r\n\r\npublic string EncryptData(string strData, string strKey)\r\n{\r\nbyte&#x5B;] key = { }; \/\/Chave de criptografia\r\nbyte&#x5B;] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };\r\nbyte&#x5B;] inputByteArray;\r\n\r\ntry\r\n{\r\nkey = Encoding.UTF8.GetBytes(strKey);\r\n\/\/ DESCryptoServiceProvider \u00e9 a classe de criptografia em c#.\r\nDESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();\r\ninputByteArray = Encoding.UTF8.GetBytes(strData);\r\nMemoryStream Objmst = new MemoryStream();\r\nCryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateEncryptor(key, IV), CryptoStreamMode.Write);\r\nObjcs.Write(inputByteArray, 0, inputByteArray.Length);\r\nObjcs.FlushFinalBlock();\r\n\r\nreturn Convert.ToBase64String(Objmst.ToArray());\/\/ string final\r\n}\r\ncatch (System.Exception ex)\r\n{\r\nthrow ex;\r\n}\r\n}\r\n\r\n\r\n<\/pre>\n<p><strong><span lang=\"pt\">C\u00f3digo de descriptografia<\/span><\/strong><\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\npublic string DecryptData(string strData, string strKey)  \r\n        {  \r\n            byte&#x5B;] key = { };\/\/ chave   \r\n            byte&#x5B;] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };  \r\n            byte&#x5B;] inputByteArray = new byte&#x5B;strData.Length];  \r\n      \r\n            try  \r\n            {  \r\n                key = Encoding.UTF8.GetBytes(strKey);  \r\n                DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();  \r\n                inputByteArray = Convert.FromBase64String(strData);  \r\n      \r\n                MemoryStream Objmst = new MemoryStream();  \r\n                CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateDecryptor(key, IV), CryptoStreamMode.Write);  \r\n                Objcs.Write(inputByteArray, 0, inputByteArray.Length);  \r\n                Objcs.FlushFinalBlock();  \r\n      \r\n                Encoding encoding = Encoding.UTF8;  \r\n                return encoding.GetString(Objmst.ToArray());  \r\n            }  \r\n            catch (System.Exception ex)  \r\n            {  \r\n                throw ex;  \r\n            }  \r\n        }\r\n<\/pre>\n<p id=\"tw-target-text\" class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">3DES \u2013 chamado Triple DES <\/span><\/strong><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">Como vimos, existem algumas quest\u00f5es relacionadas \u00e0 seguran\u00e7a no algoritmo DES, ent\u00e3o podemos dizer que, 3DES \u00e9 uma vers\u00e3o atualizada do DES. No 3DES, eles tamb\u00e9m aumentam o tamanho da chave, que era muito curto em DES, por\u00e9m cuido ao utiliz\u00e1-lo quando seus dados trafegam via rede aberta.<br \/>\n<\/span><\/p>\n<p id=\"tw-target-text\" class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">Padr\u00e3o Avan\u00e7ado de Criptografia AES <\/span><\/strong><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><span lang=\"pt\">O Advanced Encryption Standard ou AES tamb\u00e9m \u00e9 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 \u00e9 de 16 bytes, a chave de criptografia de 192 bits \u00e9 de 24 bytes eo tamanho da chave de criptografia de 256 bits \u00e9 de 32 bytes. A AES Encryption oferece um bom desempenho e um bom n\u00edvel de seguran\u00e7a. A criptografia AES \u00e9 uma cifra sim\u00e9trica e usa a mesma chave para criptografia e descriptografia. <\/span><\/p>\n<p class=\"tw-data-text tw-ta tw-text-small\" dir=\"ltr\" data-placeholder=\"Tradu\u00e7\u00e3o\"><strong><span lang=\"pt\">C\u00f3digo de criptografia<\/span><\/strong><\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring EncryptData(string textData, string Encryptionkey)  \r\n    {  \r\n                RijndaelManaged objrij = new RijndaelManaged();  \r\n                \/\/iniciar o modo de opera\u00e7\u00e3o\r\n                objrij.Mode = CipherMode.CBC;  \r\n                \/\/setar o padding de opera\u00e7\u00e3o da string\r\n                objrij.Padding = PaddingMode.PKCS7;  \r\n                \/\/setar o tamanho (em bits) da opera\u00e7\u00e3o \r\n                objrij.KeySize = 0x80;  \r\n                \/\/setar o tamanho do bloco    \r\n                objrij.BlockSize = 0x80;  \r\n                \/\/setar a chave de criptografia\r\n                byte&#x5B;] passBytes = Encoding.UTF8.GetBytes(Encryptionkey);  \r\n                \/\/setar o vetor de bytes de inicializa\u00e7\u00e3o para criptografia\r\n                byte&#x5B;] EncryptionkeyBytes = new byte&#x5B;] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };  \r\n      \r\n                int len = passBytes.Length;  \r\n                if (len &gt; EncryptionkeyBytes.Length)  \r\n                {  \r\n                    len = EncryptionkeyBytes.Length;  \r\n                }  \r\n                Array.Copy(passBytes, EncryptionkeyBytes, len);  \r\n      \r\n                objrij.Key = EncryptionkeyBytes;  \r\n                objrij.IV = EncryptionkeyBytes;  \r\n      \r\n                \/\/Cria uma chave sim\u00e9trica\r\n                ICryptoTransform objtransform = objrij.CreateEncryptor();  \r\n                byte&#x5B;] textDataByte = Encoding.UTF8.GetBytes(textData);  \r\n                \/\/Converte para string e retorna\r\n                return Convert.ToBase64String(objtransform.TransformFinalBlock(textDataByte, 0, textDataByte.Length));  \r\n     }\r\n<\/pre>\n<p><strong>C\u00f3digo de descriptografia<\/strong><\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nstring DecryptData(string EncryptedText, string Encryptionkey)  \r\n            {  \r\n                RijndaelManaged objrij = new RijndaelManaged();  \r\n                objrij.Mode = CipherMode.CBC;  \r\n                objrij.Padding = PaddingMode.PKCS7;  \r\n      \r\n                objrij.KeySize = 0x80;  \r\n                objrij.BlockSize = 0x80;  \r\n                byte&#x5B;] encryptedTextByte = Convert.FromBase64String(EncryptedText);  \r\n                byte&#x5B;] passBytes = Encoding.UTF8.GetBytes(Encryptionkey);  \r\n                byte&#x5B;] EncryptionkeyBytes = new byte&#x5B;0x10];  \r\n                int len = passBytes.Length;  \r\n                if (len &gt; EncryptionkeyBytes.Length)  \r\n                {  \r\n                    len = EncryptionkeyBytes.Length;  \r\n                }  \r\n                Array.Copy(passBytes, EncryptionkeyBytes, len);  \r\n                objrij.Key = EncryptionkeyBytes;  \r\n                objrij.IV = EncryptionkeyBytes;  \r\n                byte&#x5B;] TextByte = objrij.CreateDecryptor().TransformFinalBlock(encryptedTextByte, 0, encryptedTextByte.Length);  \r\n                return Encoding.UTF8.GetString(TextByte);  \/\/ir\u00e1 retornar a string original descriptografada\r\n            }  \r\n<\/pre>\n<p>Fonte: <a href=\"https:\/\/codigosimples.net\/2017\/02\/22\/introducao-aos-algoritmos-de-criptografia-aes-e-des-com-net\/\" target=\"_blank\" rel=\"noopener\">https:\/\/codigosimples.net\/2017\/02\/22\/introducao-aos-algoritmos-de-criptografia-aes-e-des-com-net\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existem principalmente dois tipos de algoritmos que s\u00e3o utilizados para criptografia e descriptografia. Criptografia sim\u00e9trica Neste tipo de criptografia, uma \u00fanica chave \u00e9 usada para criptografia e descriptografia. \u00c9 mais r\u00e1pido do que o outro, mas tamb\u00e9m tem alguns inconvenientes como chave \u00fanica, que \u00e9 usado para criptografia e descriptografia, ent\u00e3o quando voc\u00ea criptografar os <span class=\"ellipsis\">&hellip;<\/span> <span class=\"more-link-wrap\"><a href=\"http:\/\/gianfratti.com\/index.php\/criptografia-aes-e-des-com-net\/\" class=\"more-link\"><span>Read More &rarr;<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2,170,15,183],"tags":[],"class_list":["post-6270","post","type-post","status-publish","format-standard","hentry","category-net-framework","category-arquitetura","category-back-end","category-back-end-arquitetura"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/6270","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/comments?post=6270"}],"version-history":[{"count":7,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/6270\/revisions"}],"predecessor-version":[{"id":6279,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/6270\/revisions\/6279"}],"wp:attachment":[{"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/media?parent=6270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/categories?post=6270"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/tags?post=6270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}