src/Library/NetPro.Sign/SignCommon.cs
(开头部分) 10KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.Formatters;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace NetPro.Sign
{
/// <summary>
///
/// </summary>
public class SignCommon
{
/// <summary>
/// 通用生成签名
/// </summary>
/// <param name="secret"></param>
/// <param name="query">url参数,参数名统一小写;参数中不能包含时间戳,时间戳已内部处理,参数名为:timestamp</param>
/// <param name="body">body参数</param>
/// <param name="signMethod">算法名称:hmac-sha256;md5</param>
/// <remarks><![CDATA[ 将url参数与body参数以'&'分割]]>
/// 拼装新字符串utf-8编码后
/// HMACSHA256摘要后转16进制小写
/// </remarks>
/// <returns></returns>
public static string CreateSign(string secret, NameValueCollection query, object body = null, EncryptEnum signMethod = EncryptEnum.Default, bool prinftLog = false)
{
IDictionary<string, string> queryDic = new Dictionary<string, string>();
foreach (var k in query.AllKeys)
{
queryDic.Add(k, query[k]);
}
if (queryDic == null || !queryDic.Any())
{
Console.WriteLine("签名公共参数必须以url方式提供");
return string.Empty;
}
if (body != null)
{
var jsonString = JsonSerializer.Serialize(body, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping });
queryDic.Add("body", Regex.Replace(jsonString, @"\s(?=([^""]*""[^""]*"")*[^""]*$)", string.Empty));
}
var dicOrder = queryDic.OrderBy(s => s.Key, StringComparer.Ordinal).ToList();
StringBuilder requestStr = new StringBuilder();
for (int i = 0; i < dicOrder.Count(); i++)
后面还有 223 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。