C# 常用加密方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 常用加密方式相关的知识,希望对你有一定的参考价值。

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

namespace TRSLMS.Website.Common
{
/// <summary>
/// MD5加密
/// </summary>
public class Encrypt
{
private static MD5 md5 = MD5.Create();
//私有化构造函数
private Encrypt() { }
/// <summary>
/// 使用utf8编码将字符串散列
/// </summary>
/// <param name="sourceString">加密字符串</param>
/// <returns>返回加密后字符串不可解</returns>
public static string SetEncryptMD5(string sourceString)
{
try
{
byte[] source = md5.ComputeHash(Encoding.UTF8.GetBytes(sourceString));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < source.Length; i++)
{
sBuilder.Append(source[i].ToString("x2"));
}
return sBuilder.ToString();
}
catch (Exception)
{
return "";
}
}

//**********************************************************************
//注意了,是8个字符,64位
const string KEY_64 = "Loubyuan";
const string IV_64 = "19920923";
/// <summary>
/// DES加密方式
/// </summary>
/// <param name="sourceString">加密字符串</param>
/// <returns>加密后字符串</returns>
public static string SetEncryptDES(string sourceString)
{
try
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cst);
sw.Write(sourceString);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
catch { return ""; }
}


/// <summary>
/// DES解密
/// </summary>
/// <param name="sourceString">解密字符串</param>
/// <returns>解密后字符串</returns>
public static string GetDecryptDES(string sourceString)
{
try
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
byte[] byEnc = Convert.FromBase64String(sourceString);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
catch { return ""; }
}

//**********************************************************************
static byte[] keyArray = UTF8Encoding.UTF8.GetBytes("be4L4D5d0ff2djm2fpqmvy8flahbde4h");

/// <summary>
/// AES 加密方式
/// </summary>
/// <param name="sourceString">加密字符串</param>
/// <returns>加密后字符串</returns>
public static string SetEncryptAES(string sourceString)
{
try
{
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(sourceString);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
catch { return ""; }
}

/// <summary>
/// AES解密
/// </summary>
/// <param name="sourceString">解密字符串</param>
/// <returns>解密后字符串</returns>
public static string GetDecryptAES(string sourceString)
{
try
{
byte[] toEncryptArray = Convert.FromBase64String(sourceString);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString(resultArray);
}
catch { return ""; }
}

}
}

以上是关于C# 常用加密方式的主要内容,如果未能解决你的问题,请参考以下文章

记录C#常用的代码片段

C#中一些常用的加密和哈希处理

C#程序员经常用到的10个实用代码片段 - 操作系统

C#编写的DLL如何加密?

C# 常用加密处理

C#常用的加密解密方法