.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

.Net加密算法包括对称加密(如AES)、非对称加密(如RSA)、数字签名(如ECDsa)、哈希算法(如SHA256)和随机数生成。对称加密速度快,适合大数据;非对称加密安全但速度慢,常用于少量数据和密钥交换。数字签名确保数据完整性,哈希算法用于数据验证,而随机数在加密中起到关键作用。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



