private static string GetSignature(string args, string privatekey)
        {
            var encoding = new System.Text.UTF8Encoding();

            byte[] key          = encoding.GetBytes(privatekey);
            var    myhmacsha256 = new System.Security.Cryptography.HMACSHA256(key);

            byte[] hashValue = myhmacsha256.ComputeHash(encoding.GetBytes(args));
            string hmac64    = Convert.ToBase64String(hashValue);

            myhmacsha256.Clear();
            return(hmac64);
        }
예제 #2
0
파일: Kana.cs 프로젝트: kazukioishi/Uzuki
 public static String CaculateHMAC(String key,String mesg)
 {
     byte[] data = System.Text.Encoding.UTF8.GetBytes(mesg);
     byte[] keyData = System.Text.Encoding.UTF8.GetBytes(key);
     //HMACSHA1オブジェクトの作成
     System.Security.Cryptography.HMACSHA256 hmac = new System.Security.Cryptography.HMACSHA256(keyData);
     //ハッシュ値を計算
     byte[] bs = hmac.ComputeHash(data);
     //リソースを解放する
     hmac.Clear();
     //byte型配列を16進数に変換
     return BitConverter.ToString(bs).ToLower().Replace("-", "");
 }
예제 #3
0
        /// <summary>
        /// 站内应用使用SignedRequest获取AccessToken
        /// </summary>
        /// <param name="signedRequest">SignedRequest</param>
        /// <returns></returns>
        public AccessToken GetAccessTokenBySignedRequest(string signedRequest)
        {
            string[] parameters = signedRequest.Split('.');
            if (parameters.Length < 2)
            {
                throw new Exception("SignedRequest格式错误。");
            }
            var encodedSig  = parameters[0];
            var payload     = parameters[1];
            var sha256      = new System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(AppSecret));
            var expectedSig = Convert.ToBase64String(sha256.ComputeHash(Encoding.UTF8.GetBytes(payload)));

            sha256.Clear();

            encodedSig = parameters[0].Length % 4 == 0 ? parameters[0] : parameters[0].PadRight(parameters[0].Length + (4 - parameters[0].Length % 4), '=').Replace("-", "+").Replace("_", "/");
            payload    = parameters[1].Length % 4 == 0 ? parameters[1] : parameters[1].PadRight(parameters[1].Length + (4 - parameters[1].Length % 4), '=').Replace("-", "+").Replace("_", "/");



            if (encodedSig != expectedSig)
            {
                throw new WeiboException("SignedRequest签名验证失败。");
            }
            var result = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(payload)));

            if (result["oauth_token"] == null)
            {
                return(null);               //throw new WeiboException("没有获取到授权信息,请先进行授权。");
            }
            AccessToken token = new AccessToken();

            AccessToken = token.Token = result["oauth_token"].ToString();



            token.UID       = result["user_id"].ToString();
            token.ExpiresIn = Convert.ToInt32(result["expires"].ToString());
            return(token);
        }
예제 #4
0
파일: OAuth.cs 프로젝트: vebin/WeiboSdk
        /// <summary>
        /// 站内应用使用SignedRequest获取AccessToken
        /// </summary>
        /// <param name="signedRequest">SignedRequest</param>
        /// <returns></returns>
        public AccessToken GetAccessTokenBySignedRequest(string signedRequest)
        {
            string[] parameters = signedRequest.Split('.');
            if (parameters.Length < 2)
                throw new Exception("SignedRequest格式错误。");
            var encodedSig = parameters[0];
            var payload = parameters[1];
            var sha256 = new System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(AppSecret));
            var expectedSig = Convert.ToBase64String(sha256.ComputeHash(Encoding.UTF8.GetBytes(payload)));
            sha256.Clear();

            encodedSig = parameters[0].Length % 4 == 0 ? parameters[0] : parameters[0].PadRight(parameters[0].Length + (4 - parameters[0].Length % 4), '=').Replace("-", "+").Replace("_", "/");
            payload = parameters[1].Length % 4 == 0 ? parameters[1] : parameters[1].PadRight(parameters[1].Length + (4 - parameters[1].Length % 4), '=').Replace("-", "+").Replace("_", "/");

            if(encodedSig != expectedSig)
                throw new WeiboException("SignedRequest签名验证失败。");
            var result = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(payload)));

            if (result["oauth_token"] == null)
                return null;//throw new WeiboException("没有获取到授权信息,请先进行授权。");

            AccessToken token = new AccessToken();
            AccessToken = token.Token = result["oauth_token"].ToString();

            token.UID = result["user_id"].ToString();
            token.ExpiresIn = Convert.ToInt32(result["expires"].ToString());
            return token;
        }