2016-01-10 21 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

非常感谢:)继续帮助:) –