Skip to content

Instantly share code, notes, and snippets.

@dehora
Created January 15, 2015 13:32
Show Gist options
  • Save dehora/93cccf2914ef7250595e to your computer and use it in GitHub Desktop.
Save dehora/93cccf2914ef7250595e to your computer and use it in GitHub Desktop.
Intercom Secure Mode Signature
package io.intercom.api.secure;
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class SecureModeSignature {
private static final String HMAC_SHA_256 = "HmacSHA256";
public String createSignatureB64(String key, String data) {
return Base64.getEncoder().encodeToString(Hex.encodeHexString(createSignatureBytes(key, data, HMAC_SHA_256)).getBytes());
}
public String createSignatureHex(String key, String data) {
return Hex.encodeHexString(createSignatureBytes(key, data, HMAC_SHA_256));
}
public byte[] createSignatureBytes(String key, String data, String sha) {
try {
final SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), sha);
final Mac mac = Mac.getInstance(sha);
mac.init(keySpec);
return mac.doFinal(data.getBytes());
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException("signature_failure could not create hmac", e);
}
}
public static void main(String[] args) {
SecureModeSignature sms = new SecureModeSignature();
final String signatureHex = sms.createSignatureHex("key", "data");
System.out.println(signatureHex);
}
}
@rguldener
Copy link

Thanks a lot for this, works great! Saved me some cipher searching in the PHP documentation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment