HMAC SHA1 Signature en Java

Je suis en train de faire l'interface avec un TransUnion service web et j'ai besoin de fournir un HMAC-SHA1 signature pour y accéder.

Cet exemple est dans le TransUnion documentation:

D'entrée de SampleIntegrationOwner2008‐11‐18T19:14:40.293Z avec la sécurité
clé xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==
crée sortie de /UhwvT/kY9HxiXaOjpIc/BarBkc=.

Étant donné que les données et les clés, je ne peux pas obtenir ce même résultat en Java. J'ai essayé plusieurs calculatrices en ligne, et aucun d'entre eux de retour de ce résultat. Est l'exemple dans leur documentation incorrecte, ou suis-je tout simplement pas de la manipulation de ces chaînes correctement?

Voici le code, je suis actuellement en train de travailler:

public static String calcShaHash (String data, String key) {
    String HMAC_SHA1_ALGORITHM = "HmacSHA1";       
    String result = null;

    try {         
        Key signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
        Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
        mac.init(signingKey);
        byte[] rawHmac = mac.doFinal(data.getBytes());
        result = Base64.encodeBase64String(rawHmac);    
    }
    catch (Exception e) {
        e.printStackTrace(); 
    }       

    return result;
}

Voici mon code de test unitaire:

@Test
public void testCalcShaHash() {
    String data = "SampleIntegrationOwner2008-11-18T19:14:40.293Z";
    String key = "xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==";
    String result = Utils.calcShaHash(data, key);
    assertEquals(result, "/UhwvT/kY9HxiXaOjpIc/BarBkc=");

}
Un grand extrait de la documentation qui pourrait aider. Une chose que j'ai remarqué, c'est que les traits d'union ne sont pas normaux, des traits d'union. Si vous copiez et collez eux, ils ne sont pas dans le jeu de caractères ASCII. Tout ce que je peux dire pour sûr, c'est que le hachage de longueur s'affiche correctement.
Watts - votre commentaire sur les tirets était correcte. J'ai copié et collé le texte d'un document Word. Les tirets étaient pas les caractères ASCII standard. En mettant normal des tirets dans, le résultat était correct sans avoir besoin de décoder la clé. S'il vous plaît ajouter votre commentaire comme une réponse.

OriginalL'auteur Shane | 2012-06-02