加密


/****************************************************************************************
** 作者: Eddie Xu 
** 时间: 2017/11/16 9:16:58
** 版本: V1.0.0
** CLR: 4.0.30319.42000
** GUID: 1be37132-669a-43ce-9d42-a1d3b01ca136
** 机器名: DESKTOP-ECII567
** 描述: 加解密
****************************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace Manjinba.Communication.Common.Utils
{
public class DEncryptUtil
{
#region 使用 给定密钥字符串 加密/解密string (Base64)
/// <summary>
/// 使用给定密钥字符串加密string
/// </summary>
/// <param name="original">原始文字</param>
/// <param name="key">密钥</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>密文</returns>
public static string Encrypt(string original, string key)
{
byte[] buff = System.Text.Encoding.Default.GetBytes(original);
byte[] kb = System.Text.Encoding.Default.GetBytes(key);
return Convert.ToBase64String(Encrypt(buff, kb));
}
/// <summary>
/// 使用给定密钥字符串解密string
/// </summary>
/// <param name="original">密文</param>
/// <param name="key">密钥</param>
/// <returns>明文</returns>
public static string Decrypt(string original, string key)
{
return Decrypt(original, key, System.Text.Encoding.Default);
}

/// <summary>
/// 使用给定密钥字符串解密string,返回指定编码方式明文
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>明文</returns>
public static string Decrypt(string encrypted, string key, Encoding encoding)
{
byte[] buff = Convert.FromBase64String(encrypted);
byte[] kb = System.Text.Encoding.Default.GetBytes(key);
return encoding.GetString(Decrypt(buff, kb));
}
#endregion

#region 使用 给定密钥 加密/解密/byte[] (MD5)

/// <summary>
/// 生成MD5摘要
/// </summary>
/// <param name="original">数据源</param>
/// <returns>摘要</returns>
public static byte[] MakeMD5(byte[] original)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
byte[] keyhash = hashmd5.ComputeHash(original);
hashmd5 = null;
return keyhash;
}

/// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="original">明文</param>
/// <param name="key">密钥</param>
/// <returns>密文</returns>
public static byte[] Encrypt(byte[] original, byte[] key)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD5(key);
des.Mode = CipherMode.ECB;

return des.CreateEncryptor().TransformFinalBlock(original, 0, original.Length);
}

/// <summary>
/// 使用给定密钥解密数据
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <returns>明文</returns>
public static byte[] Decrypt(byte[] encrypted, byte[] key)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD5(key);
des.Mode = CipherMode.ECB;

return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encrypted.Length);
}

#endregion

#region 用MD5算法计算出签名 及验证签名

/// <summary>
/// 计算签名
/// </summary>
/// <param name="timeStamp">时间戳</param>
/// <param name="serverTag">服务端标记</param>
/// <param name="loginKey">登录密钥</param>
/// <returns></returns>
public static string MD5Signature(long timeStamp, string loginKey)
{
var hash = MD5.Create();
//拼接签名数据
var signStr = timeStamp + loginKey;
var bytes = Encoding.UTF8.GetBytes(signStr);
//使用MD5加密
var md5Val = hash.ComputeHash(bytes);
//把二进制转化为大写的十六进制
StringBuilder result = new StringBuilder();
foreach (var c in md5Val)
{
result.Append(c.ToString("X2"));
}
return result.ToString().ToUpper();
}

/// <summary>
/// 验证签名
/// </summary>
/// <param name="timespan">时间戳</param>
/// <param name="serverTag">服务端标记</param>
/// <param name="loginKey">登录密钥</param>
/// <param name="fromSignature">来源签名</param>
/// <returns></returns>
public static bool ValidateSign(long timespan, string loginKey, string fromSignature)
{
var signature = DEncryptUtil.MD5Signature(timespan, loginKey);
return signature.ToString().ToUpper() == fromSignature.ToUpper();
}

#endregion

/// <summary>
/// 字符MD5加密
/// </summary>
/// <param name="original"></param>
/// <returns></returns>
public static string Encrypt(string original)
{
var hash = MD5.Create();
//将字符串中字符按升序排序
var sortStr = string.Concat(original.OrderBy(c => c));
var bytes = Encoding.UTF8.GetBytes(sortStr);
//使用MD5加密
var md5Val = hash.ComputeHash(bytes);
//把二进制转化为大写的十六进制
var result = BitConverter.ToString(md5Val).Replace("-", "");
return result.ToUpper();
}

}
}

原文地址:https://www.cnblogs.com/Nine4Cool/p/10540646.html