#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);