Created
September 3, 2021 11:12
-
-
Save xbotter/86319285cc6dc31b535d87593d4cf1da to your computer and use it in GitHub Desktop.
天瑞融通 API接口使用到的C#加密方法
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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