Skip to content

Instantly share code, notes, and snippets.

@xbotter
Created September 3, 2021 11:12
Show Gist options
  • Save xbotter/86319285cc6dc31b535d87593d4cf1da to your computer and use it in GitHub Desktop.
Save xbotter/86319285cc6dc31b535d87593d4cf1da to your computer and use it in GitHub Desktop.
天瑞融通 API接口使用到的C#加密方法
private static string AesEncrypt(string cleartext, string password)
{
var aes = Aes.Create();
var sha1 = SHA1.Create();
byte[] hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(password));
var rd = sha1.ComputeHash(hash);
var keyArray = rd.Take(16).ToArray();
aes.Key = keyArray;
aes.Mode = CipherMode.ECB;
var byteBuff = Encoding.UTF8.GetBytes(cleartext);
var result = aes.CreateEncryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length);
return ParseByte2HexStr(result);
}
private static string ParseByte2HexStr(byte[] buf)
{
var sb = new StringBuilder();
for (int i = 0; i < buf.Length; i++)
{
sb.Append(buf[i].ToString("X2").ToLower());
}
return sb.ToString();
}
static string GenerateSignatureUrl(string method, string path, int expires, Dictionary<string, string> queryStrings)
{
var Expires = expires.ToString();
var Timestamp = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ");
var sortedDic = new SortedDictionary<string, string>(queryStrings ?? new Dictionary<string, string>());
var urlParam = new StringBuilder();
urlParam.Append($"{path}?");
var @params = new List<string>()
{
$"{nameof(_config.AccessKeyId)}={UrlEncode(_config.AccessKeyId)}",
$"{nameof(Expires)}={UrlEncode(Expires)}",
$"{nameof(Timestamp)}={UrlEncode(Timestamp)}"
};
foreach (var k in sortedDic)
{
@params.Add($"{k.Key}={UrlEncode(k.Value)}");
}
urlParam.Append(string.Join("&", @params));
var p = $"{method.ToUpper()}{_domain}" + urlParam.ToString();
var Signature = UrlEncode(Convert.ToBase64String(HmacSha1(Encoding.UTF8.GetBytes(p), Encoding.UTF8.GetBytes(_config.AccessKeySecret))));
urlParam.Append($"&{nameof(Signature)}={Signature}");
return urlParam.ToString();
}
static string UrlEncode(string str) => WebUtility.UrlEncode(str);
static byte[] HmacSha1(byte[] byteArray, byte[] key)
{
using var myhmacsha1 = new HMACSHA1(key);
var hashArray = myhmacsha1.ComputeHash(byteArray);
return hashArray;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment