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); }
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("-", ""); }
/// <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); }
/// <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; }