2016-01-10 39 views
0

用PHP編寫的代碼,我是Java開發人員,我嘗試使用他們已經解釋過兩個例子,第一個與PHP和第二個與C#一個Web服務API(ticketutils)。不幸的是,我無法得到任何一個。我在下面提到了PHP示例。諒解一塊使用Zend框架

public function GenerateSignature($Secret,$PathAndQuery) 
    { 
     return base64_encode(\Zend_Crypt_Hmac::compute($Secret, 'sha256', 
     $PathAndQuery, \Zend_Crypt_Hmac::BINARY)); 
    } 

任何人都可以請解釋我怎樣才能實現與Java代碼相同?我已經嘗試了下面的代碼,但它似乎沒有產生適當的結果。

public static String generateSignature(String secrete, String pathAndQuery){ 
     String encoded = null; 
     try { 
      MessageDigest md = MessageDigest.getInstance("SHA-256"); 
      md.update(secrete.getBytes("UTF-8")); 
      md.update(pathAndQuery.getBytes("UTF-8")); 
      byte[] digest = md.digest(); 
      encoded = Base64.getEncoder().encodeToString(digest); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return encoded; 
    } 

注:我使用的Java-8,而上面的代碼編寫。

+0

我想從C#與Java也許更容易.. –

+0

@aaronxxx,您也可以看到C#方法(請參閱鏈接),並儘可能幫助我。 –

回答

1

哈希與sha256..Then一個祕密關鍵字使用關鍵字來進行Base64編碼任何..

看一看 http://www.jokecamp.com/blog/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/#java

你正在尋找不完全是對,但你可以把過程分爲這兩個參數並返回Base64編碼值的函數..

import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 
import org.apache.commons.codec.binary.Base64; 

public class ApiSecurityExample { 
    public static void main(String[] args) { 
    try { 
    String secret = "secret"; 
    String message = "Message"; 

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); 
    SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); 
    sha256_HMAC.init(secret_key); 

    String hash = Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes())); 
    System.out.println(hash); 
    } 
    catch (Exception e){ 
    System.out.println("Error"); 
    } 
    } 
} 
+1

非常感謝:)繼續幫助:) –