public static string SignWithKey(WeChatPayDictionary dictionary, string key, WeChatPaySignType signType) { var sb = new StringBuilder(); foreach (var iter in dictionary) { if (!string.IsNullOrEmpty(iter.Value) && iter.Key != "sign") { sb.Append(iter.Key).Append('=').Append(iter.Value).Append("&"); } } var signContent = sb.Append("key=").Append(key).ToString(); switch (signType) { case WeChatPaySignType.MD5: return(MD5.Compute(signContent).ToUpperInvariant()); case WeChatPaySignType.HMAC_SHA256: return(HMACSHA256.Compute(signContent, key).ToUpperInvariant()); default: throw new WeChatPayException("Unknown sign type!"); } }
private static void HMacSha256Sample() { var s = "hello hmac sha256"; var k = HMACSHA256.GeneratorKey(); Console.WriteLine(Base64.ToBase64String(HMACSHA256.Compute(s, k))); Console.WriteLine(Base64.ToBase64String(HMACSHA256.Compute2(s, k))); }
private static string LianlianpayEncrypt(string req, ICipherParameters public_key, string hmack_key, string version, string aes_key, string nonce) { var base64_hmack_key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(hmack_key, public_key); var base64_aes_key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(aes_key, public_key); var base64_nonce = Convert.ToBase64String(Encoding.UTF8.GetBytes(nonce)); var iv = CreateCtrIv(Encoding.UTF8.GetBytes(nonce)); var encry = AES_CTR_NoPadding.Encrypt(req, aes_key, iv); var data = base64_nonce + "$" + encry; var sign = HMACSHA256.Compute(Encoding.UTF8.GetBytes(data), Encoding.UTF8.GetBytes(hmack_key)); var base64_sign = Convert.ToBase64String(sign); return(version + "$" + base64_hmack_key + "$" + base64_aes_key + "$" + base64_nonce + "$" + encry + "$" + base64_sign); }
private static string LianlianpayEncrypt(string req, AsymmetricKeyParameter public_key, string hmack_key, string version, string aes_key, string nonce) { var b64Hmack_key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(hmack_key, public_key); var b64Aes_key = RSA_ECB_OAEPWithSHA1AndMGF1Padding.Encrypt(aes_key, public_key); var b64Nonce = Convert.ToBase64String(Encoding.UTF8.GetBytes(nonce)); var iv = CreateCtrIv(Encoding.UTF8.GetBytes(nonce)); var encry = AES_CTR_NoPadding.Encrypt(req, aes_key, iv); var message = b64Nonce + "$" + encry; var sign = HMACSHA256.Compute(Encoding.UTF8.GetBytes(message), Encoding.UTF8.GetBytes(hmack_key)); var b64Sign = Convert.ToBase64String(sign); return(version + "$" + b64Hmack_key + "$" + b64Aes_key + "$" + b64Nonce + "$" + encry + "$" + b64Sign); }
public static string SignWithKey(SortedDictionary <string, string> parameters, string key, bool signType = true, bool excludeSignType = true) { var sb = new StringBuilder(); foreach (var iter in parameters) { if (!string.IsNullOrEmpty(iter.Value) && iter.Key != "sign" && (excludeSignType ? iter.Key != "sign_type" : true)) { sb.Append(iter.Key).Append('=').Append(iter.Value).Append("&"); } } var signContent = sb.Append("key=").Append(key).ToString(); return(signType ? MD5.Compute(signContent).ToUpper() : HMACSHA256.Compute(signContent, key).ToUpper()); }
public async Task <string> GetOpenId(string code, string appid, string secret) { var timestamp = TimeStamp(); var signature = HMACSHA256.Compute(timestamp, secret); var requestUri = $"https://oapi.dingtalk.com/sns/getuserinfo_bycode?accessKey={appid}×tamp={timestamp}&signature={HttpUtility.UrlEncode(signature)}"; var request = new HttpRequestMessage(HttpMethod.Post, requestUri); request.Content = new StringContent(JsonConvert.SerializeObject(new { tmp_auth_code = code }), Encoding.UTF8, "application/json"); var tokenResponse = await _client.SendAsync(request); tokenResponse.EnsureSuccessStatusCode(); var text = await tokenResponse.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <DingTalkUserResponse>(text); if (result.Errcode == 0) { return(result.UserInfo.Openid); } throw new Exception($"获取用户钉钉信息出错,{result.Errmsg}"); }
/// <summary> /// 加密明文密码入库 /// </summary> public string EncryptPassword(string password, string salt) { return(HMACSHA256.Compute($"{salt}{password}", _appSettings.HS256Key)); }