
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# ListBoxのアイテムをユーザ...
-
jap実行時のTomcatのエラーに困...
-
Delphiで改行文字の置換がうま...
-
「指定されたキャストは有効で...
-
【Java8以降】csvファイルの複...
-
string→CStringの型変換について
-
strcmp関数などでの複数の文字...
-
マルチスレッドで同時にFTPアッ...
-
C# で、あるフォルダー内にある...
-
javaで処理のやり方がわかりま...
-
JSPやサーブレットでSystem.out...
-
ORA-01858: 数値を指定する箇所...
-
動的配列が存在(要素が有る)か...
-
VBAで配列の計算
-
eclipseに記述したjavaファイル...
-
ダブルクォーテーションを含む...
-
オブジェクトの中のプロパティ...
-
StrutsでJSPからListを受け取り...
-
C#で、あるクラスのメンバーす...
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# ListBoxのアイテムをユーザ...
-
C#でIPアドレスの取得について
-
string→CStringの型変換について
-
「指定されたキャストは有効で...
-
【Java8以降】csvファイルの複...
-
jap実行時のTomcatのエラーに困...
-
特定の文字列が一致する行から...
-
C#での関数テーブルの作り方
-
PHPのSHA256変換について
-
Delphiで改行文字の置換がうま...
-
GDI+ DrawString() で指定範囲...
-
strcmp関数などでの複数の文字...
-
C# 他のアプリケーションから複...
-
c#で(",")区切りのcsvファイル...
-
SQLインジェクション
-
ArrayListを改良したい
-
HTML文書の文字コードの判定法
-
phpマニュアルの見方
-
2つのリストのマージ方法について
-
strncpy後のatoiがおかしい
おすすめ情報