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

0. 前言这一篇我们将介绍一下.net core 的加密和解密 。在Web应用程序中,用户的密码会使用MD5值作为密码数据存储起来 。而在其他的情况下,也会使用加密和解密的功能 。
常见的加密算法分为对称加密和非对称加密 。所谓的对称加密是指加密密钥和解密密钥是同一个,非对称加密是值加密密钥和解密密钥不同 。而我们常应用在保存用户登录密码这个过程中的MD5本质上并不是加密算法,而是一种信息摘要算法 。不过MD5尽量保证了每个字符串最后计算出来的值都不一样,所以在密码保存中常用MD5作为保密值 。

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

文章插图
 
1. 常见对称加密算法对称加密算法,简单的说就是加密和解密使用相同的密钥进行运算 。对于大多数加密算法,解密和加密是一个互逆的运算 。对称加密算法的安全性取决于密钥的长度,密钥越长越安全 。当然,不建议使用过长的密钥 。
那么,我们来看看常见的对称加密算法有哪些吧,以及C#该如何实现 。
1.1 DES 和 DESede 算法DES算法和DESede算法(又称三重DES算法) 统称DES系列算法 。DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法 。而DESede就是针对同一块数据做三次DES加密 。这里就不对原理做过多的介绍了,来看看.net core里如何实现DES加/解密吧 。
在Utils项目里,创建目录Security:
在Security目录下,创建DESHelper类:
namespace Utils.Security{    public class DesHelper  {          }}加密解密实现:
using System;using System.IO;using System.Security.Cryptography;using System.Text;?namespace Utils.Security{    public static class DesHelper  {        static DesHelper()      {            DesHandler =  DES.Create("DES");            DesHandler.Key = Convert.FromBase64String("L1yzjGB2sI4=");            DesHandler.IV = Convert.FromBase64String("uEcGI4JSAuY=");      }?        private static DES DesHandler { get; }?        /// <summary>        /// 加密字符        /// </summary>        /// <param name="source"></param>        /// <returns></returns>        public static string Encrypt(string source)      {            try          {                using (var memStream = new MemoryStream())                using (var cryptStream = new CryptoStream(memStream, DesHandler.CreateEncryptor(DesHandler.Key, DesHandler.IV),                    CryptoStreamMode.Write))              {                    var bytes = Encoding.UTF8.GetBytes(source);                    cryptStream.Write(bytes, 0, bytes.Length);                    cryptStream.FlushFinalBlock();                                        return Convert.ToBase64String(memStream.ToArray());              }          }            catch (Exception e)          {                Console.WriteLine(e);                return null;          }      }?        /// <summary>        /// 解密        /// </summary>        /// <param name="source"></param>        /// <returns></returns>        public static string Decrypt(string source)      {            try          {                using (var mStream = new MemoryStream(Convert.FromBase64String(source)))                using (var cryptoStream =                    new CryptoStream(mStream, DesHandler.CreateDecryptor(DesHandler.Key, DesHandler.IV), CryptoStreamMode.Read))                using (var reader = new StreamReader(cryptoStream))              {                    return reader.ReadToEnd();              }          }            catch (Exception e)          {                Console.WriteLine(e);                return null;          }      }  }}


推荐阅读