
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
モジュラス103の計算とは何でし...
-
VBAの再計算が反映されない件に...
-
構文解析を利用した計算プログ...
-
傾いた四角形内の範囲の条件式
-
【fortran77】データ行数のカウ...
-
排他的論理和 BCC(水平パリテ...
-
C# C1FlexGrid SUBTOTAL で計算式
-
スレッド処理からダイアログを...
-
EXCELなどで「返す」という表現
-
パソコン
-
関数電卓をc言語でつくりたいの...
-
数値計算の高速化 (cos, sin, exp)
-
Excel VBAにてFFT
-
CとFORTRANの計算速度はどちら...
-
窓関数について質問です。
-
時間(ミリ秒を含む)の引き算
-
エクセルで特定のセルのみを任...
-
切り上げたい
-
VBAで関数をつくる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
VBAで関数をつくる
-
[急募]Pythonについてです。
-
数値計算の高速化 (cos, sin, exp)
-
C言語についての質問です。 ル...
-
切り上げたい
-
DLL(VC++で作った)で稼動中の...
-
CとFORTRANの計算速度はどちら...
-
趣味で「乗換案内」みたいなソ...
-
CGIの実行権限(ディスク容...
-
エクセルで特定のセルのみを任...
-
functionを含んだプログラムを...
-
時間差を求める
おすすめ情報