簡體   English   中英

如何在PHP中使用Android Java HMAC SHA256?

[英]How make Android Java HMAC SHA256 as in PHP?

我有一個PHP代碼:

$str=base64_encode('1234');
$key='1234';
print(base64_encode(hash_hmac('sha256', $str, $key,true)));

什么代碼適用於Android Java(Android Studio)?

這段代碼在PHP中給出了不同的結果:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

private String hash_hmac(String str, String secret) throws Exception{
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
byte[] string = str.getBytes();
String stringInBase64 = Base64.encodeToString(string, Base64.DEFAULT);
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secretKey);
String hash = Base64.encodeToString(sha256_HMAC.doFinal(stringInBase64.getBytes()), Base64.DEFAULT);
return hash;
}

String str = "1234";
String key = "1234";

try {

    Log.d("HMAC:", hash_hmac(str,key));

} catch (Exception e) {
    Log.d("HMAC:","stop");
    e.printStackTrace();
}

但在原生Java中,它可以正常工作。 我無法解決這個問題;(對Android平台或設備可能有任何限制?

您正在將輸入字符串轉換為base64,這就是它不匹配的原因。 這是正確的代碼 -

private String hash_hmac(String str, String secret) throws Exception{
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");

SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secretKey);
String hash = Base64.encodeToString(sha256_HMAC.doFinal(str.getBytes()), Base64.DEFAULT);
return hash;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM