Как использовать SignatureTypes.RSASHA1 в OAuthBase.cs

#c# #google-oauth

#c# #google-oauth

Вопрос:

Я искал много веб-сайтов и получил тот же результат, что и приведенные ниже коды…

 public string GenerateSignature(Uri url, string consumerKey, string consumerSecret, string token, string tokenSecret, string httpMethod, string timeStamp, string nonce, SignatureTypes signatureType, string callback, string verifier,string body_hash, out string normalizedUrl, out string normalizedRequestParameters)
    {
        normalizedUrl = null;
        normalizedRequestParameters = null;

        switch (signatureType)
        {
            case SignatureTypes.PLAINTEXT:
                return HttpUtility.UrlEncode(string.Format("{0}amp;{1}", consumerSecret, tokenSecret));
            case SignatureTypes.HMACSHA1:
                string signatureBase = GenerateSignatureBase(url, consumerKey, token, tokenSecret, httpMethod, timeStamp, nonce, HMACSHA1SignatureType, callback, verifier,body_hash, out normalizedUrl, out normalizedRequestParameters);

                HMACSHA1 hmacsha1 = new HMACSHA1();
                hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}amp;{1}", UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? "" : UrlEncode(tokenSecret)));

                return GenerateSignatureUsingHash(signatureBase, hmacsha1);
            case SignatureTypes.RSASHA1:
                throw new NotImplementedException();
            default:
                throw new ArgumentException("Unknown signature type", "signatureType");
        }
    }
 

Кто-нибудь знает, как реализовать «SignatureTypes.RSASHA1» в C #?

Спасибо.

Ответ №1:

Старый вопрос, но только с тех пор, как я недавно столкнулся с этим, решение выглядит примерно так :

 var rsaCryptoServiceProvider = new RSACryptoServiceProvider();
rsaCryptoServiceProvider.FromXmlString(... Your key as XML ...) 

var sha = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(signatureBaseString));

var hashBytes = rsaCryptoServiceProvider.SignHash(sha, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);

var result = Convert.ToBase64String(hashBytes);