
PHPから JavaServletにアクセスするシステムを作っています。
その際にパラメーターの改ざん対策にハッシュを渡すようにしたいのですが
PHPでSHA-256でハッシュ化した値と JavaでSHA-256でハッシュかした値が異なってしまいます。
PHPだとハッシュ化する際の秘密鍵を指定する項目がありますが Javaでは見つかりませんでしたので この項目が違うために結果が違うのだと予想していますが Javaが内部的に使っている秘密鍵はどこか取得できるのでしょうか?
やりたいこととしてはPHPとJavaで同じハッシュが取得できるようにしたいのですが
良い案とかやり方あったら教えてください。
◆php
string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )
◆Java
DigestUtils.sha256Hex(string data)
わかる方いましたら教えてください。よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
SHA256の値が言語で違うというのはかなりおかしいことだと思いますが...
SHA256の計算方法は仕様として決まっており、言語やOSなどにかかわらず同じ入力に対して同じ結果が出ます。次のテストベクトル通りの答えが出ないとしたら、それが壊れてます。
http://www.nsrl.nist.gov/testdata/
> ◆php
> string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )
節子、それハッシュ値の計算やない。HMAC値の計算や。
ハッシュ値の計算をするのはこっち。
http://www.php.net/manual/ja/function.hash.php
hash_hmacはHMAC値の計算に使います。
http://www.php.net/manual/ja/function.hash-hmac. …
http://ja.wikipedia.org/wiki/HMAC
MD5だと同じ結果が出るというのもかなり不思議ですが、偶然でしょうか?
ちなみに、"abc"のSHA256を計算したらどうなりますか?
前述のNISTのページによれば、次が出てこないとダメなんですが。
"BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD"
改竄防止となると、もしかしてHMAC値の計算をしたかったのかもしれませんが、そうだとしたらこのテストベクトルを参照してください。
http://tools.ietf.org/html/rfc4231
前述のとおり、この結果を出さないほうが壊れてます。
なお、JavaでHMAC値を計算する方法は検索すればいくらでもサンプルコードが見つかると思います。DigestUtilsを使うとしたら、wikipediaに載っているようなHMACの計算を自分でやる必要があります。テストベクトル通りの答えが出ないのは間違いです。
No.3
- 回答日時:
No.2さんの通りだと僕も思います。
僕も"abc"で試しました。
System.out.println("SHA-256 = " + DigestUtils.sha256Hex("abc"));
結果は、
SHA-256 = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
です。
ちなみに僕の環境です。
・WindowsXP Pro 32bit
・javaバージョン:1.7.0_45
・commons-codec-1.8.jar
No.1
- 回答日時:
回答ありがとうございます。
ただ残念ながらアスキー文字もうまくいかないのでリンク先の件とは別物のようです。
なおMD5はPHPとJavaでどちらも同じ値になりました。
SHA-256じゃなくてMD5使う方向で話を持って行くしかないか、、、とも思いつつ 相手方の現在のシステム(Java)がSHA-256使ってるので変えるの結構大変そうだしなぁ。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) exFATの外付けSSDからパソコンのNTFSの内蔵ストレージにコピーした場合はコピーしたデータのハ 2 2023/08/09 19:51
- その他(コンピューター・テクノロジー) ハッシュ値を取ったらその取ったハッシュ値はどのように保管すればよいのでしょうか?ハッシュ値のデータす 2 2023/07/02 19:40
- その他(コンピューター・テクノロジー) なぜデータの整合性を確認する時はハッシュ値で確認するのでしょうか?ハッシュ値は衝突する可能性があるの 5 2023/07/05 20:38
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java JAVA、PHPの案件に入るにはどうしたらいいですか? 1 2023/04/03 07:29
- PHP eclipse pleiades phpのインストールについて 1 2023/02/03 17:15
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入射角反射角
-
べき乗の計算が遅い理由
-
65536は2の何乗なのでしょうか?
-
「評価」「評価値」という言葉...
-
勤怠管理表を作成しています、...
-
パソコン
-
Nの階乗
-
DLL(VC++で作った)で稼動中の...
-
C++ で預金計算
-
VBAの高速化に関しての質問
-
分数計算で分母と分子を維持す...
-
C# C1FlexGrid SUBTOTAL で計算式
-
交通流シミュレータ
-
FCC(面心立方)の位置に粒...
-
PHPとJavaでSHA256の結果を同じ...
-
モジュラス103の計算とは何でし...
-
駅間の距離を求め運賃計算するJ...
-
C#でDirectXを利用し、曲面を描...
-
エクセル 再計算とVBA の...
-
VBAで関数をつくる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
エクセルで特定のセルのみを任...
-
matlabで計算終了
-
モジュラス103の計算とは何でし...
-
変化させるセルが変化しない
-
数値計算の高速化 (cos, sin, exp)
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
スレッド処理からダイアログを...
-
時間(ミリ秒を含む)の引き算
-
VB6で正確なミリ秒を計測したい...
-
60進数の四則計算
-
PHPとJavaでSHA256の結果を同じ...
-
C言語についてです。 再帰を使...
-
なぜオーバーフローになるので...
-
VBA入力フォームで労働時間の計...
おすすめ情報