C#で以下のロジックがあるのですが、
using System.Text;
using System.Security.Cryptography;
private static string getHash(string data, string salt, int stretchingcount, Encoding encode)
{
int m = salt.Length / 2;
string tmp = salt.Substring(0, m) + data + salt.Substring(m);
byte[] buf = encode.GetBytes(tmp);
SHA256CryptoServiceProvider algorithm = new SHA256CryptoServiceProvider();
for (int i = 0; i < stretchingcount; ++i)
{
buf = algorithm.ComputeHash(buf);
}
return BitConverter.ToString(buf).Replace("-", string.Empty);
}
こちらのソースをPHPで同じ結果になるように実装したいのですが、
同じ結果にならず、困っています。
PHP側のソースは以下の通りです。
public static function funcPrivacyCheck($data,$salt,$stretchingcount){
$m = strlen($salt) / 2;
$tmp = substr($salt,0,$m).$id.substr($salt,$m);
$tmp = base64_encode(utf8_encode($tmp));
$hash = '';
for ($i = 0; $i < $stretchingcount; $i++) {
if($hash <> ''){
$hash = hash_hmac('sha256' ,$hash, false);
}else{
$hash = hash_hmac('sha256' ,$tmp, false);
}
}
return $hash;
}
エンコードは、UTF-8を指定することが前提です。
ご教授頂きますようよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
C#はSHA256を計算しているのにPHPはHMAC-SHA256を計算しているのですから,異なるのは当然です。
HMACはハッシュ関数を使ってメッセージ認証コードを作成するための方法です。
PHPでハッシュを計算するのであれば,hash関数を利用します。
ref) http://php.net/manual/ja/function.hash.php
# MD5とSHA1は専用関数がありますが,現時点においてこれらのハッシュ関数の使用は推奨されません。
もし,C#で実はHMAC-SHA256が欲しいのであれば,HMACSHA256クラスを利用します。
ref) http://msdn.microsoft.com/ja-jp/library/system.s …
始めはhashを使用して処理をしていたのですが、結果が合わず、hash_hmac関数を使用しました。
hashを使用することはわかりましたので、再度、確認します。
No.1
- 回答日時:
『同じことをしたいコード』に全く見えないのですが、
とりあえず気になる点だけ。
・C# :string tmp = salt.Substring(0, m) + data + salt.Substring(m);
PHP:$tmp = substr($salt,0,$m).$id.substr($salt,$m);
この2行は同じ処理を想定しているのでしょうか?
・PHP の $tmp = base64_encode(utf8_encode($tmp));
は不要な処理では。少なくとも、ここで base64_encode を実行
するのは誤りでしょう。C# 側にはそんな処理入っていませんので。
ご回答ありがとうございます。
>・C# :string tmp = salt.Substring(0, m) + data + salt.Substring(m);
>PHP:$tmp = substr($salt,0,$m).$id.substr($salt,$m);
>この2行は同じ処理を想定しているのでしょうか?
同じ処理を想定しております。
>PHP の $tmp = base64_encode(utf8_encode($tmp));
>は不要な処理では。少なくとも、ここで base64_encode を実行
>するのは誤りでしょう。C# 側にはそんな処理入っていませんので
ありがとうございます。
情報ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Java8以降】csvファイルの複...
-
strcmp関数などでの複数の文字...
-
マルチスレッドで同時にFTPアッ...
-
変数を動的に利用するには?
-
C言語のポインターに関する警告
-
大量のデータを読み込んで表示...
-
EXCEL VBA で、0から?1から?
-
[JAVA]try 内の変数を外で!?
-
「例外 *** は対応する try 文...
-
ORA-01858: 数値を指定する箇所...
-
getStringの値がNULLの時の処理
-
ダブルクォーテーションのrepla...
-
javascriptで文字列のsjis利用...
-
JSPやサーブレットでSystem.out...
-
BOOL値を逆にしたい
-
ループ処理の際、最後だけ","を...
-
,で句切って部分一致をファイ...
-
yyyymmddからyyyy/mm/d...
-
javaで質問です。 文字列2023/2...
-
wsprintf関数の使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
strcmp関数などでの複数の文字...
-
C# ListBoxのアイテムをユーザ...
-
jap実行時のTomcatのエラーに困...
-
特定の文字列が一致する行から...
-
マルチスレッドで同時にFTPアッ...
-
【Java8以降】csvファイルの複...
-
「指定されたキャストは有効で...
-
C#での関数テーブルの作り方
-
Delphiで改行文字の置換がうま...
-
ArrayListを改良したい
-
GridViewで複数のDropDownList...
-
strtokでの空文字への置き換え
-
C#でIPアドレスの取得について
-
c言語
-
C#での関数テーブルの作り方
-
GDI+ DrawString() で指定範囲...
-
PHPのSHA256変換について
-
C# JSONについて
-
XP+PHP+POSTGRES(SJIS)
-
C++のmap
おすすめ情報