2016-09-22 1 views
2

에서 equivalant 나는 내가 너무 0315a69471ebe855e9e221a374b30d8de08dcc833857f964737632698c87278e을 얻을 자바

String data = "hello world"; 
String key = "7E066"; 
System.out.println(hmacSha(key,data, "HmacSHA256")); 

private static String hmacSha(String KEY, String VALUE, String SHA_TYPE) { 
     try { 

      SecretKeySpec signingKey = new SecretKeySpec(KEY.getBytes("UTF-8"), SHA_TYPE); 
      Mac mac = Mac.getInstance(SHA_TYPE); 
      mac.init(signingKey); 
      byte[] rawHmac = mac.doFinal(VALUE.getBytes("UTF-8")); 

      byte[] hexArray = { 
        (byte)'0', (byte)'1', (byte)'2', (byte)'3', 
        (byte)'4', (byte)'5', (byte)'6', (byte)'7', 
        (byte)'8', (byte)'9', (byte)'a', (byte)'b', 
        (byte)'c', (byte)'d', (byte)'e', (byte)'f' 
      }; 
      byte[] hexChars = new byte[rawHmac.length * 2]; 
      for (int j = 0; j < rawHmac.length; j++) { 
       int v = rawHmac[j] & 0xFF; 
       hexChars[j * 2] = hexArray[v >>> 4]; 
       hexChars[j * 2 + 1] = hexArray[v & 0x0F]; 
      } 
      return new String(hexChars); 
     } 
     catch (Exception ex) { 
      throw new RuntimeException(ex); 
     } 
    } 

에서

0315a69471ebe855e9e221a374b30d8de08dcc833857f964737632698c87278e를 얻을. 팩 기능

$message = "hello world"; 
$key = "7E066"; 
echo hash_hmac('SHA256',$message, pack('H*',$key)); 

와 PHP에서

은 내가 무엇 팩 기능을 이해하지 못하는 33e97719c1b98f64bd0394e7fe94f43eae927e15f9eda15aeff0830bc3dd2fc3

, 나는 자바에서 동일한 기능을 쓸 수 없습니다 얻을. 누구든지 제발 도와 주실 수 있습니까?

+0

와우 덕분에 매력처럼 작동합니다. – Learner

답변

0

이 시도 : 정확히 반환이 데이터에 대한

public String pack(String hex) { 
    String input = hex.length() % 2 == 0 ? hex : hex + "0"; 
    StringBuilder output = new StringBuilder(); 
    for (int i = 0; i < input.length(); i+=2) { 
     String str = input.substring(i, i+2); 
     output.append((char)Integer.parseInt(str, 16)); 
    } 
    return output.toString(); 
} 

을 당신이 필요로하는 것을 :

String data = "hello world"; 
    String key = "7E066"; 
    System.out.println(hmacSha(key,data, "HmacSHA256")); 
    System.out.println(hmacSha(pack(key), data, "HmacSHA256")); 

0315a69471ebe855e9e221a374b30d8de08dcc833857f964737632698c87278e 
33e97719c1b98f64bd0394e7fe94f43eae927e15f9eda15aeff0830bc3dd2fc3 

을 트릭은 그 홀수 길이 변화의 입력을 16 진수 문자열을위한 팩() PHP 함수 즉, 값의 오른쪽에 0을 하나 추가하십시오. 이는 짝수 길이 입력 16 진수 문자열에 대해서만 이진 문자열을 계산할 수 있기 때문입니다.