Ejemplo n.º 1
0
        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!");
            }
        }
Ejemplo n.º 2
0
        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)));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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());
        }
Ejemplo n.º 6
0
        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}&timestamp={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}");
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 加密明文密码入库
 /// </summary>
 public string EncryptPassword(string password, string salt)
 {
     return(HMACSHA256.Compute($"{salt}{password}", _appSettings.HS256Key));
 }