プロが教える店舗&オフィスのセキュリティ対策術

Objective-Cでハッシュ値を生成し、PHPに送って、
PHP側でもハッシュ値を生成し、この2つを比較したいと思っています。

PHPでは、以下の関数でSHA256が取得できることがわかりました。
hash_hmac('sha256', $text, false)

Objective-Cは自分で実装する必要があるようなので、以下のページのコードを使わせてもらいました。
http://zak-za-k.blogspot.jp/2011/09/objective-cs …

この2つの関数それぞれで、同じ文字列を使ってSHA256のハッシュ値を出したのですが、
結果が違ってしまいます。
2つの関数で同じ結果を得られるようにするにはどうすればよいでしょうか。
参考にした上記URLのコードの内容は、ほとんど理解できていません。

よろしくお願いいたします。

A 回答 (1件)

ObjectiveCの方は見ていませんが、PHPで使うべき関数を間違えているのが原因だと思います。

hash値を計算するならhash関数です。

とりあえず、ハッシュ関数や暗号化などが正しく動いているかどうかを調べるときは、入力と期待される出力が例示されているテストベクトルを見るのが当たり前です。SHA256のテストベクトルは下記で見つかります。
http://www.nsrl.nist.gov/testdata/

例えば、 "abc"のhash値を計算して、16進数表示した時に
BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD
という結果が出ないというのはSHA256の仕様通りの計算ができていません。
ちなみに、hash_hmac('sha256', 'abc', false);するとこの値は出ません。

まずはhash関数のマニュアルを見てみましょう。
http://www.php.net/manual/ja/function.hash.php

ちなみに、hash_hmac関数というのはHMACを計算するための関数です。
http://ja.wikipedia.org/wiki/HMAC
http://www.php.net/manual/ja/function.hash-hmac. …
当然、出てくる値も違うはずです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
大変参考になりました。

お礼日時:2013/06/09 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!