.Net支持SHA256withRSA

时间:2014-05-05 00:14:07

标签: asp.net oauth cryptography oauth-2.0 google-oauth

我需要支持以下签名:

使用SHA256withRSA(也称为带有SHA-256哈希函数的RSASSA-PKCS1-V1_5-SIGN)和从Google Developers Console获得的私钥对输入的UTF-8表示进行签名。输出将是一个字节数组。

以下代码失败,并且"指定了无效的算法"。这是.NET的限制吗?以下是我的代码片段:

var rsa2 = new RSAPKCS1SignatureFormatter(rsa);
rsa2.SetHashAlgorithm("SHA256");
bytes = rsa2.CreateSignature(bytes);

上述要求是计算服务器的签名到Google API的服务器应用程序。

https://developers.google.com/accounts/docs/OAuth2ServiceAccount#computingsignature

感谢您的帮助。

卡尔..

以下是签署JWT的代码。我已经删除了使用RSAPKC1SingatureFormatter类并使用另一个HASHCompute方法来努力使某些东西起作用(仍然无效)

我不确定这是否正确,不幸的是我来自Rest服务的回复总是相同的" Invalid Grant"很难说。

public string Generate(string HeadJWT, string ContentJWT, X509Certificate2 certificate)
{

  var bytes = Utility.getBytes(HeadJWT);
  var base64Head = Utility.Base64UrlEncode(bytes);

  // base64 Url Encode Payload (Json Content)
  bytes = Utility.getBytes(ContentJWT);
  var base64Payload = Utility.Base64UrlEncode(bytes);

  var secureInputValue = String.Format("{0}.{1}", base64Head, base64Payload);
  bytes = Stub.Jwt.Utility.getBytes(secureInputValue);
  bytes = Stub.Jwt.Utility.ComputeHMACSha265(bytes, certificate.PublicKey.EncodedKeyValue.RawData);

  _signature = Stub.Jwt.Utility.Base64UrlEncode(bytes);

  return String.Format("{0}.{1}.{2}", base64Head, base64Payload, _signature);
}

1 个答案:

答案 0 :(得分:1)

这一般不能限制.NET,因为example Microsoft code似乎使用"SHA256"本身。但它可能是您特定运行时的限制。