.Net常见的几种加密方式

.Net加密算法包括对称加密(如AES)、非对称加密(如RSA)、数字签名(如ECDsa)、哈希算法(如SHA256)和随机数生成。对称加密速度快,适合大数据;非对称加密安全但速度慢,常用于少量数据和密钥交换。数字签名确保数据完整性,哈希算法用于数据验证,而随机数在加密中起到关键作用。
摘要由CSDN通过智能技术生成

.Net加密算法主要分为:对称算法、非对称算法、哈希算法、随机算法。每种算法都有自己的使用场景,例如 保护隐私(防止查看)、保护完整性(防止更改)、数字签名、生成秘钥、秘钥交换、生成随机数等。
按照不同场景,微软建议使用的算法如下:

  • 数据隐私:Aes
  • 数据完整性:HMACSHA256、HMACSHA512
  • 数字签名:ECDsa、RSA
  • 密钥交换:ECDiffieHellman、RSA
  • 随机数生成:RandomNumberGenerator
  • 从密码生成密钥:Rfc2898DeriveBytes

一、私钥加密

私钥加密也称之为对称加密,因为使用的是相同的秘钥来加密、解密。对称加密是对流执行的,所以可以对大数据进行加密。对称加密速度比公钥加密速度快。对称算法要求创建秘钥和初始化向量(IV),秘钥必须保密、IV可以公开但应定期更改。常见的私钥加密有:DES、AES、HMACSHA256、HMACSHA384、HMACSHA512等。

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;

namespace Demo
{
   
    class Program
    {
   
        static void Main(string[] args)
        {
   
            #region 秘钥长度
            //16位密钥 = 128位
            //24位密钥 = 192位
            //32位密钥 = 256位
            Aes aes = Aes.Create();
            KeySizes[] ks = aes.LegalKeySizes;
            foreach (KeySizes k in ks)
            {
   
                Console.WriteLine("\tLegal min key size = " + k.MinSize);
                Console.WriteLine("\tLegal max key size = " + k.MaxSize);
                Console.WriteLine("\tLegal skipsize = " + k.SkipSize);
            }
            //This sample produces the following output:
            //        Legal min key size = 128
            //        Legal max key size = 256
            //        Legal skipsize = 64
            #endregion

            string original = "Here is some data to encrypt!";
            
            // Create a new instance of the Aes
            // class.  This generates a new key and initialization
            // vector (IV).
            //using (Aes myAes = Aes.Create())
            //{
   
            //   var strkey = Convert.ToBase64String(myAes.Key);
            //   var striv = Convert.ToBase64String(myAes.IV);
            //}

            var strkey = "BlkUeVL1KZ/AVTo36ziIOIg+cvztnOCUlc3HNoQBs8c=";
            var striv = "G2+hseZr74KJtu1BCdzdwQ==";

            //Aes加密
            var encrypted = AesEncrypt(original, strkey, striv);
            //Aes解密
            string roundtrip = AesDecrypt(encrypted, strkey, striv);

            Console.WriteLine("Encrypted:   {0}", encrypted);
            Console.WriteLine("Round Trip: {0}", roundtrip);
 
            Console.ReadLine();
        }
 
        /// <summary>
        /// Aes加密
        /// </summary>
        /// <param name="plainText"></param>
        /// <param name="Key"></param>
        /// <param name="IV"></param>
        /// <returns></returns>
        static string AesEncrypt(string plainText, string strkey, string striv)
        {
   
            var Key = Convert.FromBase64String(strkey);
            var IV = Convert.FromBase64String(striv);

            // Check arguments.
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;

            // Create an Aes object
            // with the specified key and IV.
            using (Aes aesAlg = Aes.Create())
            {
   
                //密钥
                aesAlg.Key = Key;
                //初始化向量
                aesAlg.IV = IV;
                //运算模式
                aesAlg.Mode = CipherMode.CBC;
                //填充模式
                aesAlg.Padding = PaddingMode.PKCS7;
                //加密操作的块大小(以位为单位)
                aesAlg.BlockSize = 128;

                // Create an encryptor to perform the stream transform.
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
   
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
   
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
   
                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }

            // Return the encrypted bytes from the memory stream.
            //return encrypted;

            return Convert.ToBase64String(encrypted);
        }

        /// <summary>
        /// Aes解密
        /// </summary>
        /// <param name="text"></param>
        /// <param name="Key"></param>
        /// <param name="IV"></param>
        /// <returns></returns>
        static string AesDecrypt(string text, string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>