using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace 加密2解密
{
class Cipher
{
static byte[] Key { get; set; }
static byte[] Iv { get; set; }
static Cipher()
{
//算法签名,这里我用的是TripleDES加密算法,TripleDESCryptoServiceProvider构造方法同时会初始化一组随机的key和IV。
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
Key=tDESalg.Key;
Iv=tDESalg.IV;
}
//==============================================================MD5不可逆加密
/// <summary>
/// 对用户传进来的字符串进行不可逆(MD5)加密
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <returns>返回值是已经加密的字符串</returns>
public static string EncMd5(string str)
{
//获取加密服务
System.Security.Cryptography.MD5CryptoServiceProvider md5CSP = new System.Security.Cryptography.MD5CryptoServiceProvider();
//获取要加密的字段,并转化为Byte[]数组
byte[] strEncrypt = System.Text.Encoding.UTF8.GetBytes(str);
//加密Byte[]数组
byte[] resultEncrypt = md5CSP.ComputeHash(strEncrypt);
//将加密后的数组转化为字段(普通加密)
//string EncStr = System.Text.Encoding.UTF8.GetString(resultEncrypt);
string EncStr = "";
for (int i = 0; i < resultEncrypt.Length; i++)
{
EncStr = EncStr + resultEncrypt[i].ToString("x").PadLeft(2, '0');
}
return EncStr;
}
//=================================================================TripleDES加密
/// <summary>
/// 对字符串加密
/// </summary>
/// <param name="str">需要加密的字符串</param>
/// <returns>一个已经加密的字符串的二进制流</returns>
public static byte[] EncTripleDES(string str)
{
//将用户传进来的字符串转换成编码为UTF8的二进制流
byte[] encStrStream = Encoding.UTF8.GetBytes(str);
//建立一个MemoryStream,这里面存放加密后的数据流
MemoryStream mStream = new MemoryStream();
//使用MemoryStream和key,IV新建一个CryptoStream对象
CryptoStream cStream = new CryptoStream(mStream, new TripleDESCryptoServiceProvider().CreateEncryptor(Key, Iv), CryptoStreamMode.Write);
//将加密后的字节流写入到MemoryStream
cStream.Write(encStrStream, 0, encStrStream.Length);
//把缓冲区中的最后状态更新到MemoryStream,并清除cStream的缓存区
cStream.FlushFinalBlock();
// 把解密后的数据流转成字节流
byte[] byteStream = mStream.ToArray();
//关闭两个streams
cStream.Close();
mStream.Close();
return byteStream;
}
//==========================================================TripleDES解密
/// <summary>
/// 对加密二进制流进行解密
/// </summary>
/// <param name="encbyteStream">需要解密的二进制流</param>
/// <returns>返回一个已经解密的字符串</returns>
public static string DecTripleDES(byte[] encbyteStream)
{
// 建立一个MemoryStream,这里面存放加密后的数据流
MemoryStream msDecrypt = new MemoryStream(encbyteStream);
// 使用MemoryStream 和key、IV新建一个CryptoStream 对象
CryptoStream csDecrypt = new CryptoStream(msDecrypt, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, Iv), CryptoStreamMode.Read);
// 根据密文byte[]的长度(可能比加密前的明文长),新建一个存放解密后明文的byte[]
byte[] DecryptDataArray = new byte[encbyteStream.Length];
// 把解密后的数据读入到DecryptDataArray
csDecrypt.Read(DecryptDataArray, 0, DecryptDataArray.Length);
string DecStr = Encoding.UTF8.GetString(DecryptDataArray);
msDecrypt.Close();
csDecrypt.Close();
return DecStr;
}
}
class Program
{
static void Main(string[] args)
{
// Console.WriteLine(Cipher.EncMd5("abc"));
byte[] bytes = Cipher.EncTripleDES("中国");
foreach (byte s in bytes)
{
Console.Write(s);
}
Console.WriteLine();
Console.WriteLine(Cipher.DecTripleDES(bytes));
Console.ReadKey();
}
}
}
c#MD5加密TripleDES加密解密封装
最新推荐文章于 2023-02-03 09:00:00 发布