usingSystem.Security.Cryptography;usingSystem.Text;namespaceWebApi_PaddleOCRSharp{publicclassSha256Helper{/// <summary>/// 【无密钥,纯哈希】计算字符串 SHA256 哈希,返回小写十六进制,/// 默认编码:UTF8/// </summary>/// <param name="input">原始字符串</param>/// <returns>64位小写sha256</returns>/// <exception cref="ArgumentNullException">输入为空</exception>publicstaticstringComputeSha256Lower(stringinput){if(input==null)thrownewArgumentNullException(nameof(input));byte[]rawBytes=Encoding.UTF8.GetBytes(input);byte[]hashBytes=ComputeSha256Bytes(rawBytes);returnBitConverter.ToString(hashBytes).Replace("-","").ToLowerInvariant();}/// <summary>/// 【无密钥,纯哈希】计算字符串 SHA256 哈希,返回大写十六进制/// 默认编码:UTF8,/// </summary>publicstaticstringComputeSha256Upper(stringinput){if(input==null)thrownewArgumentNullException(nameof(input));byte[]rawBytes=Encoding.UTF8.GetBytes(input);byte[]hashBytes=ComputeSha256Bytes(rawBytes);returnBitConverter.ToString(hashBytes).Replace("-","");}/// <summary>/// 对字节数组计算SHA256,返回哈希字节数组/// </summary>publicstaticbyte[]ComputeSha256Bytes(byte[]data){if(data==null)thrownewArgumentNullException(nameof(data));// SHA256.Create() 优先使用操作系统硬件加速实现using(SHA256sha256=SHA256.Create()){returnsha256.ComputeHash(data);}}/// <summary>///【无密钥,纯哈希】 重载:自定义编码计算字符串SHA256(小写)/// </summary>publicstaticstringComputeSha256Lower(stringinput,Encodingencoding){if(input==null)thrownewArgumentNullException(nameof(input));if(encoding==null)thrownewArgumentNullException(nameof(encoding));byte[]rawBytes=encoding.GetBytes(input);byte[]hashBytes=ComputeSha256Bytes(rawBytes);returnBitConverter.ToString(hashBytes).Replace("-","").ToLowerInvariant();}/// <summary>/// 【有密钥】HMACSHA256 签名(推荐接口验签!相比普通SHA256更安全)/// </summary>/// <param name="source">待签原文</param>/// <param name="secretKey">密钥</param>/// <param name="upper">大小写</param>/// <returns>签名串</returns>publicstaticstringHmacSha256Sign(stringsource,stringsecretKey,boolupper=false){if(string.IsNullOrEmpty(source))thrownewArgumentNullException(nameof(source));if(string.IsNullOrEmpty(secretKey))thrownewArgumentNullException(nameof(secretKey));byte[]keyBytes=Encoding.UTF8.GetBytes(secretKey);byte[]dataBytes=Encoding.UTF8.GetBytes(source);usingvarhmac=newHMACSHA256(keyBytes);byte[]hashBytes=hmac.ComputeHash(dataBytes);StringBuildersb=newStringBuilder();foreach(varbinhashBytes){sb.Append(b.ToString(upper?"X2":"x2"));}returnsb.ToString();}}}