C# hash签名,哈希签名Sha256

发布时间:2026/7/24 4:18:58
C# hash签名,哈希签名Sha256 usingSystem.Security.Cryptography;usingSystem.Text;namespaceWebApi_PaddleOCRSharp{publicclassSha256Helper{/// summary/// 【无密钥纯哈希】计算字符串 SHA256 哈希返回小写十六进制,/// 默认编码UTF8/// /summary/// param nameinput原始字符串/param/// returns64位小写sha256/returns/// exception crefArgumentNullException输入为空/exceptionpublicstaticstringComputeSha256Lower(stringinput){if(inputnull)thrownewArgumentNullException(nameof(input));byte[]rawBytesEncoding.UTF8.GetBytes(input);byte[]hashBytesComputeSha256Bytes(rawBytes);returnBitConverter.ToString(hashBytes).Replace(-,).ToLowerInvariant();}/// summary/// 【无密钥纯哈希】计算字符串 SHA256 哈希返回大写十六进制/// 默认编码UTF8/// /summarypublicstaticstringComputeSha256Upper(stringinput){if(inputnull)thrownewArgumentNullException(nameof(input));byte[]rawBytesEncoding.UTF8.GetBytes(input);byte[]hashBytesComputeSha256Bytes(rawBytes);returnBitConverter.ToString(hashBytes).Replace(-,);}/// summary/// 对字节数组计算SHA256返回哈希字节数组/// /summarypublicstaticbyte[]ComputeSha256Bytes(byte[]data){if(datanull)thrownewArgumentNullException(nameof(data));// SHA256.Create() 优先使用操作系统硬件加速实现using(SHA256sha256SHA256.Create()){returnsha256.ComputeHash(data);}}/// summary///【无密钥纯哈希】 重载自定义编码计算字符串SHA256小写/// /summarypublicstaticstringComputeSha256Lower(stringinput,Encodingencoding){if(inputnull)thrownewArgumentNullException(nameof(input));if(encodingnull)thrownewArgumentNullException(nameof(encoding));byte[]rawBytesencoding.GetBytes(input);byte[]hashBytesComputeSha256Bytes(rawBytes);returnBitConverter.ToString(hashBytes).Replace(-,).ToLowerInvariant();}/// summary/// 【有密钥】HMACSHA256 签名推荐接口验签相比普通SHA256更安全/// /summary/// param namesource待签原文/param/// param namesecretKey密钥/param/// param nameupper大小写/param/// returns签名串/returnspublicstaticstringHmacSha256Sign(stringsource,stringsecretKey,boolupperfalse){if(string.IsNullOrEmpty(source))thrownewArgumentNullException(nameof(source));if(string.IsNullOrEmpty(secretKey))thrownewArgumentNullException(nameof(secretKey));byte[]keyBytesEncoding.UTF8.GetBytes(secretKey);byte[]dataBytesEncoding.UTF8.GetBytes(source);usingvarhmacnewHMACSHA256(keyBytes);byte[]hashByteshmac.ComputeHash(dataBytes);StringBuildersbnewStringBuilder();foreach(varbinhashBytes){sb.Append(b.ToString(upper?X2:x2));}returnsb.ToString();}}}