using System;
using System.Security.Cryptography;
using System.Text;
///
/// 签名算法:MD5(content + keys) 然后转base64
///
public class SignatureHelper
{
///
/// 生成签名
///
/// 待签名的内容
/// 字符编码,通常为 "UTF-8"
/// 密钥
/// Base64编码的签名
public static string DoSign(string content, string charset, string keys)
{
try
{
// 拼接内容和密钥
string signContent = content + keys;
// 根据字符集获取编码
Encoding encoding = GetEncoding(charset);
// 计算MD5哈希
byte[] signBytes = encoding.GetBytes(signContent);
byte[] md5Hash = MD5.HashData(signBytes);
// 转换为Base64字符串
string sign = Convert.ToBase64String(md5Hash);
return sign;
}
catch (Exception ex)
{
throw new Exception($"签名失败: {ex.Message}", ex);
}
}
///
/// 根据字符集名称获取编码对象
///
private static Encoding GetEncoding(string charset)
{
if (string.IsNullOrEmpty(charset))
{
return Encoding.UTF8;
}
switch (charset.ToUpper())
{
case "UTF-8":
case "UTF8":
return Encoding.UTF8;
case "GBK":
return Encoding.GetEncoding("GBK");
case "GB2312":
return Encoding.GetEncoding("GB2312");
default:
try
{
return Encoding.GetEncoding(charset);
}
catch
{
return Encoding.UTF8;
}
}
}
}