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=");
}
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
Vous devez vous connecter pour publier un commentaire.
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. La chose drôle est, je ne pouvais pas obtenir votre code pour produire la bonne réponse, même après avoir mis le bon de traits d'union dans. Mais peu importe. Il a résolu le problème. Huzzah!
OriginalL'auteur John Watts
Qui ressemble à un encodées en Base64 clé. Donc, je pense que vous allez avoir besoin de faire un décodage base64 sur elle, puis la passer à la HMAC. Quelque chose comme ceci (juste pour l'illustration, je ne l'ai pas testé, toutes les erreurs sont un exercice pour le lecteur):
Il est possible de déchiffrer la valeur à l'aide de la clé utilisée pour le cryptage ?
Pas de HMAC est une façon de hachage qui utilise une paire clé publique/privée pour valider que le hachage a été généré à l'aide de cette clé. Dans des conditions normales de façon fonctions de hachage (SHA-1, MD5, SHA256, etc) il n'y a pas de secret clés impliquées afin que toute personne qui connaît l'algorithme permet de créer une table de hachage. HMAC vous permet de vous assurer seule la personne/système de tenue d'une touche spécifique généré ce code de hachage, et personne d'autre.
OriginalL'auteur chubbsondubs