私は Android で認証サービスをプログラミングしていますが、これには Java で書かれたサーバー部分が含まれています。Android とサーバーで次の 2 つのコードを実行する両方の部分で同じ操作を行います。
アンドロイド:
String genChallengeResponse(String challenge, String message) {
String Hmac_ALG = "HmacSHA256";
SecretKey key = new SecretKeySpec(challenge.getBytes(), Hmac_ALG);
Mac m = Mac.getInstance(Hmac_ALG);
m.init(key);
m.update(password.getBytes());
byte[] mac = m.doFinal();
return new String(Base64.encode(mac, Base64.DEFAULT));
}
サーバ:
String genChallengeResponse(String challenge, String message) {
String Hmac_ALG = "HmacSHA256";
SecretKey key = new SecretKeySpec(challenge.getBytes(), Hmac_ALG);
Mac m = Mac.getInstance(Hmac_ALG);
m.init(key);
m.update(password.getBytes());
byte[] mac = m.doFinal();
return new String(Base64.encodeBase64(mac));
}
同じ課題とメッセージから始めて、結果は次のとおりです。
Android: n2EaLpQr0uKgkZKhCQzwuIFeeLjzZKerZcETVNcfla4= サーバー: n2EaLpQr0uKgkZKhCQzwuD9eeLjzZKerZcETVNcfla4= ^^
これらは 2 つの文字だけが異なります。問題は、この奇妙な動作が、関数に渡されるすべての文字列のペアに現れないことです...
各システムでUTF-8を使用しようとしましたが、何も変わりません...誰かが問題を知っていますか? これが既知の問題である場合...
(Android 2.2または4.0を使用しても問題は同じであると言うことが重要です。問題はオペレーティングシステムではないと思います)。