title: Java HmacSHA256 with key
body: <p>i have tried several links from stackoverflow to get HmacSHA256 with key to work with java, but i always get </p>
  
  <pre><code> func check(body: String) -&gt; String {
      let hash = body.hmac(HMACAlgorithm.sha256, key: Router.sigKey)
      print("SIG: " + Router.sigKey)
      print("result of hash. \(hash)")
      return hash
  }
  </code></pre>
  
  <p>This function returns hash with key from given String. 
  Key was: 0393e944ee8108bb66fc9fa4f99f9c862481e9e0519e18232ba61b0767eee8c6</p>
  
  <p>String was: example</p>
  
  <p>Result is: 27effb76c97022497e25d3a5d7e823462f212a82d9ebba35f179071568b0c335</p>
  
  <p>When i use <a href="https://www.freeformatter.com/hmac-generator.html#ad-output" rel="noreferrer">this</a> website to check if my SHA256 is good with the same key, it returns same answer, so i know my code in swift is good. But when i try to do it in java, here is the source code.</p>
  
  <pre><code>public static String HMAC_SHA(){
      try {
          String secret = "0393e944ee8108bb66fc9fa4f99f9c862481e9e0519e18232ba61b0767eee8c6";
          String message = "example";
          Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
          SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
          sha256_HMAC.init(secret_key);
          String hash = android.util.Base64.encodeToString(sha256_HMAC.doFinal(message.getBytes()), Base64.URL_SAFE);
          return new String(Hex.encodeHex(hash.getBytes()));
      }
      catch (Exception e){
          e.printStackTrace();
      }
      return null;
  }
  </code></pre>
  
  <p>It returns this: 4a2d5f3764736c77496b6c2d4a644f6c312d676a526938684b6f4c5a36376f3138586b4846576977777a553d0a</p>
  
  <p>Which is not even similar to the swift output. How can i achieve the same result with java from the swift code above, it would be helpful a lot!</p>