Ответ 1
Я использовал эту библиотеку для Android OAuth Client: http://code.google.com/p/oauth-signpost/
Используя спецификации ниже, мне нужно создать oauth_signature на Android. Я ищу библиотеку, которая обрабатывает код плиты котла, создавая подпись для доступа к ресурсам через OAuth.
Построить сигнатурную "базовую строку", которая состоит из конкатенации трех элементов запроса:
- Метод HTTP-запроса.
- Базовый URL, на который отправляется запрос. Этот URL-адрес не должен содержать никаких параметров запроса. При подписке на звонки в службы Google обратитесь к спецификации 9A.1.2 OAuth для соответствующих инструкций.
- Нормализованная строка параметров в запросе (исключая параметр oauth_signature). Сюда входят параметры, отправленные в заголовок или тело запроса, а также параметры запроса, добавленные к URL-адресу запроса. Чтобы нормализовать строку, сортируйте параметры, используя упорядочение значений лексикографического байта. Более подробную информацию о нормализации этой строки см. В разделе 9.1.1 спецификации OAuth.
Создайте знак oauth_signature, используя одну из следующих последовательностей:
- Если ваша заявка зарегистрирована и вы используете HMAC-SHA1, используйте значение "секретность потребителя" OAuth, созданное во время регистрации; это значение отображается на странице регистрации домена.
Я использовал эту библиотеку для Android OAuth Client: http://code.google.com/p/oauth-signpost/
В ответ на вопрос "Ответ на вопрос Криса" вы можете использовать встроенный 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);
Где "секрет" будет текст, который вы хотите закодировать, а "результат" выше - ваша кодированная хэш-подпись.
Я ничего не знаю об OAuth, но вы можете использовать javax.crypto.Mac
для генерации значения HMAC-SHA1 (используйте HmacSHA1
как имя алгоритма):
Mac hmac = Mac.getInstance("HmacSHA1");
Вот код, который я использовал, просто передайте значение и ключ в 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);
}