使用下面的specifications我需要在Android上创建oauth_signature。我正在寻找一个处理锅炉板代码的库,用于创建通过OAuth访问资源的签名。
构造一个签名“基本字符串”,它由三个请求元素的串联组成:
- HTTP请求方法。
- 请求发送到的基本URL。此URL不应包含任何查询参数。在签署对Google服务的调用时,请参阅OAuth规范第9.1.2节,了解相关说明。
- 请求中参数的标准化字符串(不包括oauth_signature参数)。这包括请求标头或正文中发送的参数,以及添加到请求URL的查询参数。要规范化字符串,请使用词典字节值排序对参数进行排序。有关规范化此字符串的更多详细信息,请参阅OAuth规范的第9.1.1节。
- 醇>
使用以下序列之一生成oauth_signature:
- 如果您的应用程序已注册且您正在使用HMAC-SHA1,请使用注册期间生成的OAuth“consumer secret”值;此值显示在您域名的注册页面上。
答案 0 :(得分:10)
在回答Will对Chris的回答的问题时,您可以使用内置的android javax.crypto.mac使用以下代码生成hmacsha1签名(标准Java JCE提供程序apis):
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);
你想要编码的文字是'secret',上面的'result'将是你的哈希编码签名。
答案 1 :(得分:1)
我对OAuth一无所知,但您可以使用javax.crypto.Mac
生成HMAC-SHA1值(使用HmacSHA1
作为算法名称):
Mac hmac = Mac.getInstance("HmacSHA1");
答案 2 :(得分:1)
这是我使用的代码, 只需将值和键传递给hmacSha1()..它返回hmacsha1字符串;
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);
}
答案 3 :(得分:0)
我已将此库用于Android OAuth客户端:http://code.google.com/p/oauth-signpost/