首页 > 编程知识 正文

hmac sha256 java,带有密钥的Java HmacSHA256

时间:2023-05-03 15:16:18 阅读:237118 作者:2009

i have tried several links from stackoverflow to get HmacSHA256 with key to work with java, but i always get

func check(body: String) -> String {

let hash = body.hmac(HMACAlgorithm.sha256, key: Router.sigKey)

print("SIG: " + Router.sigKey)

print("result of hash. (hash)")

return hash

}

This function returns hash with key from given String.

Key was: 0393e944ee8108bb66fc9fa4f99f9c862481e9e0519e18232ba61b0767eee8c6

String was: example

Result is: 27effb76c97022497e25d3a5d7e823462f212a82d9ebba35f179071568b0c335

When i use this 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.

public static String HMAC_SHA(){

try {

String secret = "0393e944ee8108bb66fc9fa4f99f9c862481e9e0519e18232ba61b0767eee8c6";

String message = "example";

Mac sha256_HMAC = Mac.getInstance("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;

}

It returns this: 4a2d5f3764736c77496b6c2d4a644f6c312d676a526938684b6f4c5a36376f3138586b4846576977777a553d0a

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!

解决方案

String key = "0393e944ee8108bb66fc9fa4f99f9c862481e9e0519e18232ba61b0767eee8c6";

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");

sha256_HMAC.init(new SecretKeySpec(key.getBytes(), "HmacSHA256"));

byte[] result = sha256_HMAC.doFinal("example".getBytes());

// ONLY CONVERT TO HEX (= SWIFT) NOT FIRST TO BASE64

result as requested

27EFFB76C97022497E25D3A5D7E823462F212A82D9EBBA35F179071568B0C335

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。