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; } } } }