TransUnion Web サービスに接続しようとしていますが、アクセスするには HMAC-SHA1 署名を提供する必要があります。
この例は、TransUnion のドキュメントにあります。セキュリティ キーを使用して を
入力すると、 の
出力が作成されます。SampleIntegrationOwner2008‐11‐18T19:14:40.293Z
xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==
/UhwvT/kY9HxiXaOjpIc/BarBkc=
そのデータとキーを考えると、Java でこれと同じ結果を得ることができません。いくつかのオンライン計算機を試しましたが、どれもこの結果を返しません。ドキュメントの例は間違っていますか、それともこれらの文字列を正しく処理していないだけですか?
これが私が現在取り組んでいるコードです:
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;
}
これが私の単体テストコードです:
@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=");
}