【问题标题】:Understanding piece of code written in PHP using Zend framework了解使用 Zend 框架用 PHP 编写的一段代码
【发布时间】:2016-01-11 02:35:40
【问题描述】:

我是 Java 开发人员,我正在尝试使用一个 WEB 服务 API (ticketutils),他们已经解释了两个示例,第一个示例使用 PHP,第二个示例使用C#。不幸的是,我无法得到它们中的任何一个。我在下面提到了 PHP 示例。

 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。

【问题讨论】:

  • 我认为从 c# 到 java 可能更容易..
  • @aaronxxx,你也可以看到 C# 方法(参考链接),如果可能的话帮助我。

标签: java php zend-framework encoding sha256


【解决方案1】:

使用 sha256 散列一个 Secret 关键字..然后使用该关键字对 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");
    }
   }
}

【讨论】:

  • 非常感谢 :) 继续帮助 :)
【解决方案2】:

消息摘要的 Java API 与 C# API 非常相似。请按照以下示例进行操作: https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html

【讨论】:

  • 感谢您的宝贵时间,但我在上面的方法中使用了相同的示例。如果你能找到不同的,请你提出相同的建议吗?
猜你喜欢
  • 2011-05-16
  • 2012-06-03
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2010-12-04
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多