在Java中实现RSA-SHA1签名算法(创建用于OAuth RSA-SHA1签名的私钥)

时间:2010-03-30 12:26:25

标签: java oauth digital-signature

如您所知,OAuth可以支持RSA-SHA1签名。我有一个OAuthSignature接口,它具有以下方法

public String sign(String data, String consumerSecret, String tokenSecret) throws GeneralSecurityException;

我成功实施并测试了HMAC-SHA1签名(OAuth支持)以及PLAINTEXT“签名”。

我搜索了谷歌,如果我需要使用SHA1withRSA签名,我必须创建一个私钥:示例代码:

  /**
   * Signs the data with the given key and the provided algorithm.
   */
  private static byte[] sign(PrivateKey key,
                             String data)
      throws GeneralSecurityException {

    Signature signature = Signature.getInstance("SHA1withRSA");
    signature.initSign(key);
    signature.update(data.getBytes());
    return signature.sign();
  }

现在,我如何获取OAuth密钥(key = consumerSecret& tokenSecret)并创建PrivateKey以与SHA1withRSA签名一起使用?

由于


来自OAuth Core

  

9.3。 RSA-SHA1

     

RSA-SHA1签名方法使用   RSASSA-PKCS1-v1_5签名算法   如[RFC3447]中所定义(Jonsson,J。   和B. Kaliski,“公钥   密码学标准(PKCS)#1:RSA   密码;规格版本   2.1,“。”第8.2节(更简单地称为PKCS#1),使用SHA-1作为   EMSA-PKCS1-v1_5的哈希函数。它   假设消费者有   提供其RSA公钥   经验证的服务提供商方式,   以超出范围的方式   本规范。

我现在正在使用此(http://code.google.com/apis/gdata/docs/auth/oauth.html)作为执行RSA-SHA1签名的参考。

2 个答案:

答案 0 :(得分:1)

OAuthSignature接口来自哪个API?是否有可能RSA签名不需要tokenSecret参数?

答案 1 :(得分:1)

似乎RSA-SHA1不需要消费者的秘密,你可以在这里引用Jersey工具https://svn.java.net/svn/jersey~svn/trunk/jersey/contribs/jersey-oauth/oauth-signature/src/main/java/,类com.sun.jersey.oauth.signature.RSA_SHA1。