用于在Android上生成HMAC-SHA1 OAuth签名的库?

使用下面的规格 ,我需要在Android上创build一个oauth_signature。 我正在寻找一个库来处理锅炉板代码,以创build一个通过OAuth访问资源的签名。

  1. 构build一个签名“基本string”,它由三个请求元素的连接组成:

    • HTTP请求方法。
    • 请求发送到的基本URL。 此url不应包含任何查询参数。 在对Google服务进行签名时,请参阅OAuth规范第9.1.2节中的相关说明。
    • 请求中参数的规范化string(不包括oauth_signature参数)。 这包括在请求头或主体中发送的参数,以及添加到请求URL的查询参数。 要规范化string,请使用字典sorting字节值sorting参数。 有关规范化该string的更多详细信息,请参阅OAuth规范的第9.1.1节。
  2. 使用以下某个序列生成oauth_signature:

    • 如果您的应用程序已注册并且您使用的是HMAC-SHA1,请使用在注册期间生成的OAuth“使用者密码”值; 该值显示在您的域的注册页面上。

Solutions Collecting From Web of "用于在Android上生成HMAC-SHA1 OAuth签名的库?"

我已经使用这个库的Android OAuth客户端: http : //code.google.com/p/oauth-signpost/

在Will回答Chris的问题时,可以使用内置的android javax.crypto.mac来使用以下代码(标准Java JCE提供程序apis)生成hmacsha1签名:

Mac mac = Mac.getInstance("HmacSHA1"); SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm()); mac.init(secret); byte[] digest = mac.doFinal(baseString.getBytes()); byte[] result=Base64.encode(digest, DEFAULT); 

在哪里“秘密”是你想要编码的文本,上面的“结果”是你的散列编码签名。

我对OAuth一无所知,但可以使用javax.crypto.Mac生成HMAC-SHA1值(使用HmacSHA1作为algorithm名称):

 Mac hmac = Mac.getInstance("HmacSHA1"); 

这里是我使用的代码,只是传递值和关键到hmacSha1()..它返回hmacsha1string;

 private static String hmacSha1(String value, String key) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException { String type = "HmacSHA1"; SecretKeySpec secret = new SecretKeySpec(key.getBytes(), type); Mac mac = Mac.getInstance(type); mac.init(secret); byte[] bytes = mac.doFinal(value.getBytes()); return bytesToHex(bytes); } private final static char[] hexArray = "0123456789abcdef".toCharArray(); private static String bytesToHex(byte[] bytes) { char[] hexChars = new char[bytes.length * 2]; int v; for (int j = 0; j < bytes.length; j++) { v = bytes[j] & 0xFF; hexChars[j * 2] = hexArray[v >>> 4]; hexChars[j * 2 + 1] = hexArray[v & 0x0F]; } return new String(hexChars); }