HMAC-SHA256 Algorithm for signature calculation HMAC-SHA256 Algorithm for signature calculation java java

HMAC-SHA256 Algorithm for signature calculation


Here is my solution:

public static String encode(String key, String data) throws Exception {  Mac sha256_HMAC = Mac.getInstance("HmacSHA256");  SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");  sha256_HMAC.init(secret_key);  return Hex.encodeHexString(sha256_HMAC.doFinal(data.getBytes("UTF-8")));}public static void main(String [] args) throws Exception {  System.out.println(encode("key", "The quick brown fox jumps over the lazy dog"));}

Or you can return the hash encoded in Base64:

Base64.encodeBase64String(sha256_HMAC.doFinal(data.getBytes("UTF-8")));

The output in hex is as expected:

f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8


The 0x just denotes that the characters after it represent a hex string.

0x1A == 1Ah == 26 == 1A

So the 0x is just to clarify what format the output is in, no need to worry about it.


If you're using Guava, its latest release now lets you use

 Hashing.hmacSha256()

One example of using this:

String hash = Hashing.hmacSha256("mykey".getBytes(StandardCharsets.UTF_8)).hashString("my_message", StandardCharsets.UTF_8).toString()

Further documentation here: https://guava.dev/releases/23.0/api/docs/com/google/common/hash/Hashing.html#hmacSha256-byte:A-