LinuxクライアントとWindowsクライアントでデジタル署名が異なるという奇妙な問題に直面しています。エンコーディングが異なる場合にこれが発生する可能性があるので、すべてのコードをUTF-8に変更しました。また、ハードコードされた文字列を追加して、シグネチャが異なるかどうかを確認しました。Java:Windowsクライアントとは異なるデジタル署名
これは文字列である:
"http%3a%2f%2fschemas.xmlsoap.org"
ローカル署名である:
23d8190409b19fcfb83586b317de8ef710bd485ab5277238f2f2d3fa5daa3660
サーバ列がある:ここ
7bacef6d25665ae8df11f736b2612c8ebc92a160ee4ced4606c07e7a93a50338
は、署名コードである:
private String sign(String data) throws Exception {
InputStream input = getClass().getResourceAsStream(
securityWebApi.getSecurityFilterConfiguration().getAzureSignatureKey());
Reader reader = new InputStreamReader(input, "UTF-8");
byte[] key = IOUtils.toByteArray(reader, Charset.forName("UTF-8"));
LOG.debug("got key array : " + new String(key));
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key, "HmacSHA256");
sha256_HMAC.init(secret_key);
String testSign = Hex
.encodeHexString(sha256_HMAC.doFinal("http%3a%2f%2fschemas.xmlsoap.org".getBytes("UTF-8")));
LOG.debug("test sign == " + testSign);
String testSign2 = "Bla"
+"bla";
LOG.debug("test sign2== " + Hex
.encodeHexString(sha256_HMAC.doFinal(testSign2.getBytes("UTF-8"))));
return Hex.encodeHexString(sha256_HMAC.doFinal(data.getBytes("UTF-8")));
}
したがって、すべての署名が異なります。どうやら私はここに何か根本的なものを見逃しているのですが、何ですか? ご協力いただきありがとうございます。
はい、サーバーコードはOracle Weblogic 11gで実行されています。
もちろん、秘密鍵が等しいかどうかを再確認します。
秘密鍵も添付できますか? (mijnnuonapi.key私は思います)。可能であれば、テストサインとテストサイン2の予想結果を指定できますか? – Aris2World
こんにちは、あなたはクライアントとサーバー上のtestSingの結果を見ることができます。私はここでAPIキーを印刷することはできません。 –
「取得されたキー配列:」をログに記録すると、クライアントログとサーバーログを同じ値で比較できますか? – Aris2World