每次调用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(); } } }}
文章插图
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; } } }}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 用Python实现十大经典排序算法-插入、选择、快速、冒泡、归并等
- 常见的错误喝茶方法,错误的喝茶习惯
- 茶叶保存常见的小窍门,鲜美的漳平水仙冻茶
- 基础通俗讲解集成学习算法
- 流行的机器学习算法总结,帮助你开启机器学习算法学习之旅
- 人工智能28个常见专业术语,别再说你看不懂AI了,分享教程资料
- 陈年铁观音储存方法,储存白毛猴茶的常见方法
- 新手开淘宝店应该注意些什么 新手开店常见的误区有哪些
- 算法专家教你一致性算法:Paxos+Zab+Raft+NWR+Gossip+一致性Hash
- 什么是搜索算法?初学者的SEO:使流量增长了令人难以置信的385%