我是java开发人员,我正在尝试使用一个where (蜱类),其中他们解释了两个示例,一个用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。
发布于 2016-01-10 12:35:20
使用sha256..Then散列一个秘密关键字,使用该关键字对Base64中的任何内容进行编码。
不完全是您想要的,但您可以将进程转换为一个函数,该函数接受两个参数并返回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");
}
}
}发布于 2016-01-10 10:10:08
用于消息摘要的Java与C#非常相似。请遵循以下示例:https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html
https://stackoverflow.com/questions/34703699
复制相似问题