Files
GateDge2023_ljy/08.昶东/EastChanger/SignUtil.cs
PastSaid 08d8878eef a
2024-03-11 14:47:23 +08:00

88 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace EastChanger
{
public static class SignUtil
{
/// <summary>
/// sign生成
/// </summary>
/// <param name="paramsMap"></param>
/// <param name="secret"></param>
/// <returns></returns>
public static string BuildSign(Dictionary<string, object> paramsMap, string secret)
{
//var keySet = paramsMap.Keys;
List<string> paramNames = paramsMap.Keys.ToList();
paramNames.Sort();
StringBuilder paramNameValue = new StringBuilder();
foreach (var paramName in paramNames)
{
paramNameValue.Append(paramName).Append(paramsMap[paramName]);
}
string source = secret + paramNameValue.ToString() + secret;
return ToMD5(source);
}
/// <summary>
/// MD加密
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public static string ToMD5(string message)
{
try
{
// 1 创建一个提供信息摘要算法的对象初始化为md5算法对象
MD5 md5 = new MD5CryptoServiceProvider();
// 2 将消息变成byte数组
byte[] input = Encoding.UTF8.GetBytes(message);
// 3 计算后获得字节数组,这就是那128位了
byte[] buff = md5.ComputeHash(input);
// 4 把数组每一字节一个字节占八位换成16进制连成md5字符串
return Byte2hex(buff);
}
catch (Exception e)
{
throw e;
}
}
private static string Byte2hex(byte[] bytes)
{
//创建一个StringBuilder对象来存储最终的结果
StringBuilder sign = new StringBuilder();
//使用for循环遍历字节数组中的每个字节
for (int i = 0; i < bytes.Length; i++)
{
// 将字节强制转换为整数,并对其进行位运算,即保留后八位的值,并转换为十六进制形式的字符串
string hex = bytes[i].ToString("x2");
// 如果转换后的字符串长度为1即只有1位则在前面添加一个0以保证每个字节都是两位十六进制数
if (hex.Length == 1)
{
sign.Append("0");
}
// 将转换后的字符串追加到StringBuilder对象中并转换为大写形式
sign.Append(hex.ToUpper());
}
return sign.ToString();
}
public static string UrlEncode(string str)
{
StringBuilder sb = new StringBuilder();
byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)
for (int i = 0; i < byStr.Length; i++)
{
sb.Append(@"%" + Convert.ToString(byStr[i], 16));
}
return (sb.ToString());
}
}
}