Библиотека для генерации подписи HAMAC-SHA1 OAuth на Android? - PullRequest
11 голосов
/ 14 мая 2011

Используя спецификации ниже, мне нужно создать подпись oauth_signature на Android.Я ищу библиотеку, которая обрабатывает код базовой платы при создании подписи для доступа к ресурсам через OAuth.

  1. Создайте "базовую строку" подписи, которая состоит изобъединение трех элементов запроса:

    • Метод HTTP-запроса.
    • Базовый URL-адрес, на который отправляется запрос.Этот URL не должен содержать никаких параметров запроса.При подписании вызовов к службам Google см. Соответствующие инструкции в спецификации OAuth, раздел 9.1.2.
    • Нормализованная строка параметров в запросе (исключая параметр oauth_signature).Сюда входят параметры, отправленные в заголовке или теле запроса, а также параметры запроса, добавленные к URL-адресу запроса.Чтобы нормализовать строку, отсортируйте параметры, используя лексикографический порядок значений байтов.Для получения дополнительной информации о нормализации этой строки см. Раздел 9.1.1 спецификации OAuth.
  2. Создайте oauth_signature, используя одну из следующих последовательностей:

    • Если ваше приложение зарегистрировано и вы используете HMAC-SHA1, используйте значение OAuth «секрет клиента», сгенерированное при регистрации;это значение отображается на странице регистрации вашего домена.

Ответы [ 4 ]

10 голосов
/ 01 января 2012

Отвечая на вопрос Уилла об ответе Криса, вы можете использовать встроенный android javax.crypto.mac для генерации подписи hmacsha1, используя следующий код (стандартный apis провайдера Java JCE):

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 голос
/ 06 сентября 2015

Вот код, который я использовал, просто передайте значение и ключ в 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);
    }
1 голос
/ 14 мая 2011

Я ничего не знаю об OAuth, но вы можете использовать javax.crypto.Mac для генерации значения HMAC-SHA1 (используйте HmacSHA1 в качестве имени алгоритма):

Mac hmac = Mac.getInstance("HmacSHA1");
0 голосов
/ 14 мая 2011

Я использовал эту библиотеку для OAuth-клиента Android: http://code.google.com/p/oauth-signpost/

...