常见加密算法 「asp.net core 系列」12 数据加密算法( 二 )

每次调用DesHandler = DES.Create("DES"); 都会重新获得一个DES算法实现实例,这样每次获取的实例中Key、IV这两个属性的值也会发生变化 。如果直接使用会出现这次加密的数据下次就没法解密了,为了减少这种情况,所以代码处手动赋值了Key、IV这两个属性 。
1.2 AES 加密算法AES算法(Advanced Encryption Standard)也就是高级数据加密标准算法,是为了解决DES算法中的存在的漏洞而提出的算法标准 。现行的AES算法核心是Rijndael算法 。当然了,这个不用太过于关心 。我们直接看看是如何实现吧:
同样,在Security目录创建一个AesHelper类:
namespace Utils.Security{    public static class AesHelper  {          }}具体的加解密实现:
using System;using System.IO;using System.Security.Cryptography;?namespace Utils.Security{    public static class AesHelper  {        static AesHelper()      {            AesHandler = Aes.Create();            AesHandler.Key = Convert.FromBase64String("lB2BxrJdI4UUjK3KEZyQ0obuSgavB1SYJuAFq9oVw0Y=");            AesHandler.IV = Convert.FromBase64String("6lra6ceX26Fazwj1R4PCOg==");      }?        private static Aes AesHandler { get; }?        public static string Encrypt(string source)      {            using (var mem = new MemoryStream())            using (var stream = new CryptoStream(mem, AesHandler.CreateEncryptor(AesHandler.Key, AesHandler.IV),                CryptoStreamMode.Write))          {                using (var writer = new StreamWriter(stream))              {                    writer.Write(source);              }                 return Convert.ToBase64String(mem.ToArray());          }                  }?        public static string Decrypt(string source)      {            var data = https://www.isolves.com/it/cxkf/cxy/2020-06-22/Convert.FromBase64String(source); using (var mem = new MemoryStream(data)) using (var crypto = new CryptoStream(mem, AesHandler.CreateDecryptor(AesHandler.Key, AesHandler.IV), CryptoStreamMode.Read)) using (var reader = new StreamReader(crypto)) { return reader.ReadToEnd(); } } }}

常见加密算法 「asp.net core 系列」12 数据加密算法

文章插图
 
2. 常见非对称加密算法非对称加密算法,指的是加密密钥和解密密钥并不相同 。非对称加密算法的密钥通常成对出现,分为公开密钥和私有密钥 。公开密钥可以以公开的形式发给数据交互方,而不会产生泄密的风险 。因为非对称加密算法,无法通过公开密钥推算私有密钥,反之亦然 。
通常,非对称加密算法是用公钥进行加密,使用私钥进行解密 。
2.1 RSA算法RSA算法是标准的非对称加密算法,名字来源是三位发明者的姓氏首字母 。RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。其安全性取决于密钥的长度,1024位的密钥几乎不可能被破解 。
同样,在Utils.Security下创建RSAHelper类:
namespace Utils.Security{    public static class RsaHelper  {          }}具体实现:
using System;using System.Security.Cryptography;?namespace Utils.Security{    public static class RsaHelper  {        public static RSAParameters PublicKey { get; private set; }        public static RSAParameters PrivateKey { get; private set; }?        static RsaHelper()      {                  }?        public static void Initwindows()      {            var parameters = new CspParameters()          {                KeyContainerName = "RSAHELPER" // 默认的RSA保存密钥的容器名称          };            var handle = new RSACryptoServiceProvider(parameters);            PublicKey = handle.ExportParameters(false);            PrivateKey = handle.ExportParameters(true);      }?        public static void ExportKeyPair(string publicKeyXmlString, string privateKeyXmlString)      {            var handle  = new RSACryptoServiceProvider();            handle.FromXmlString(privateKeyXmlString);            PrivateKey = handle.ExportParameters(true);            handle.FromXmlString(publicKeyXmlString);            PublicKey = handle.ExportParameters(false);      }        public static byte[] Encrypt(byte[] dataToEncrypt)      {            try          {                byte[] encryptedData;                using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())              {                    RSA.ImportParameters(PublicKey);                    encryptedData = https://www.isolves.com/it/cxkf/cxy/2020-06-22/RSA.Encrypt(dataToEncrypt, true); }? return encryptedData; } catch (CryptographicException e) { Console.WriteLine(e.Message); return null; } }? public static byte[] Decrypt(byte[] dataToDecrypt) { try { byte[] decryptedData; using (var rsa = new RSACryptoServiceProvider()) { rsa.ImportParameters(PrivateKey); decryptedData = rsa.Decrypt(dataToDecrypt, true); } return decryptedData; } catch (CryptographicException e) { Console.WriteLine(e.ToString()); return null; } } }}


推荐阅读