11 Stimmen

Bibliothek zur Erzeugung von HMAC-SHA1 OAuth-Signaturen unter Android?

Die Verwendung des Spezifikationen Im Folgenden muss ich eine oauth_signature auf Android erstellen. Ich bin auf der Suche nach einer Bibliothek, die den Boiler-Plate-Code bei der Erstellung einer Signatur für den Zugriff auf Ressourcen über OAuth behandelt.

  1. Konstruieren Sie eine Signatur "base string", die aus einer Verkettung von drei Anfrageelementen besteht:

    • Die HTTP-Anforderungsmethode.
    • Die Basis-URL, an die die Anfrage gesendet wird. Diese URL sollte keine Abfrageparameter enthalten. Wenn Sie Aufrufe an Google-Dienste signieren, finden Sie in der OAuth-Spezifikation, Abschnitt 9.1.2, entsprechende Anweisungen.
    • Eine normalisierte Zeichenfolge der Parameter in der Anfrage (mit Ausnahme des Parameters oauth_signature). Dazu gehören Parameter, die in der Kopfzeile oder im Textkörper der Anfrage gesendet werden, sowie Abfrageparameter, die der Anfrage-URL hinzugefügt werden. Um die Zeichenkette zu normalisieren, sortieren Sie die Parameter anhand der lexikografischen Bytewertreihenfolge. Weitere Einzelheiten zur Normalisierung dieser Zeichenfolge finden Sie in Abschnitt 9.1.1 der OAuth-Spezifikation.
  2. Erzeugen Sie eine oauth_signature mit einer der folgenden Sequenzen:

    • Wenn Ihre Anwendung registriert ist und Sie HMAC-SHA1 verwenden, verwenden Sie den bei der Registrierung generierten OAuth "consumer secret"-Wert; dieser Wert wird auf der Registrierungsseite Ihrer Domain angezeigt.

12voto

DEzra Punkte 2908

Als Antwort auf Wills Frage zu Chris' Antwort können Sie die in Android eingebaute javax.crypto.mac verwenden, um die hmacsha1-Signatur mit folgendem Code zu erzeugen (Standard-Java-JCE-Provider-Api):

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);

Dabei wäre "secret" der Text, den Sie verschlüsseln möchten, und "result" wäre Ihre hashverschlüsselte Signatur.

1voto

Chris Jester-Young Punkte 212385

Ich weiß nichts über OAuth, aber Sie können javax.crypto.Mac um einen HMAC-SHA1-Wert zu erzeugen (verwenden Sie HmacSHA1 als Name des Algorithmus):

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

1voto

Muneef M Punkte 1074

Hier ist der von mir verwendete Code, übergeben Sie einfach den Wert und den Schlüssel an die hmacSha1() es gibt hmacsha1 String;

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);
    }

0voto

andrewmitchell Punkte 1549

Ich habe diese Bibliothek für einen Android OAuth Client verwendet: http://code.google.com/p/oauth-signpost/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X