使用 Zend 框架理解 PHP 中编写的一段代码
Understanding piece of code written in PHP using Zend framework
我是 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。
消息摘要的 Java API 与 C# 非常相似。请遵循以下示例:
https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html
使用 sha256 对 Secret 关键字进行哈希处理。然后使用该关键字对 Base64 中的任何内容进行编码。
不完全是你要找的东西,但你可以把这个过程变成一个函数,它有两个参数和 returns 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");
}
}
}
我是 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。
消息摘要的 Java API 与 C# 非常相似。请遵循以下示例: https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html
使用 sha256 对 Secret 关键字进行哈希处理。然后使用该关键字对 Base64 中的任何内容进行编码。
不完全是你要找的东西,但你可以把这个过程变成一个函数,它有两个参数和 returns 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");
}
}
}