スタックオーバーフローで同じ質問がいくつか表示されましたが、回答が見つかりませんでした。Android JavaとPHP HASH HMAC SHA256の異なる結果
のAndroidのJava:
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();
}
結果:
UHWlHiPrOxxncJTagnlvVcln3xKZ1PKaojFeTMDLXws=
そしてでPHPコード:
$str=base64_encode('1234');
$key='1234';
print(base64_encode(hash_hmac('sha256', $str, $key,true)));
結果:
FBp7PnSG4MQNgcFWAjjlkxNdiqivrmNfnRZur1Dko2Q=
ご覧のとおり、私は異なった結果を持っています。私は間違っていますか?
PS。私は言うようにコードを編集しますが、それは私を助けませんでした。私は別の結果を持っている理由を説明してください。
PHPではbase64_encode関数の2倍を使いましたが、Javaでは一度しか使用しませんでした。 – Edwin
私はそれを修正しますが、結果はPHPとAndroid Javaでは異なります。 –
PHPで 'hash_hmac( 'sha256'、$ str、$ key、true)の値を表示できますか? – Edwin