
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を探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# ListBoxのアイテムをユーザ...
-
strcmp関数などでの複数の文字...
-
マルチスレッドで同時にFTPアッ...
-
C#でIPアドレスの取得について
-
System.err. printlnとSystem.o...
-
JSPやサーブレットでSystem.out...
-
ループ処理の際、最後だけ","を...
-
C言語のポインターに関する警告
-
1~100までの数字を表示し、か...
-
javaで質問です。 文字列2023/2...
-
論理演算子”||”またはの入力方法
-
動的配列が存在(要素が有る)か...
-
EXCEL VBA で、0から?1から?
-
オブジェクトの中のプロパティ...
-
int型のゼロ埋め
-
JSPでImportエラーになります
-
java キーボード入力された値の...
-
eclipseに記述したjavaファイル...
-
一定のスペースを空けて端を揃...
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# ListBoxのアイテムをユーザ...
-
【Java8以降】csvファイルの複...
-
特定の文字列が一致する行から...
-
C#でIPアドレスの取得について
-
マルチスレッドで同時にFTPアッ...
-
Delphiで改行文字の置換がうま...
-
jap実行時のTomcatのエラーに困...
-
strcmp関数などでの複数の文字...
-
C# JSONについて
-
C#での関数テーブルの作り方
-
string→CStringの型変換について
-
「指定されたキャストは有効で...
-
C#のdelegateについて
-
C#のStreamReaderでのforeach
-
strtokでの空文字への置き換え
-
C++/CLI 関数がインポートでき...
-
GridViewで複数のDropDownList...
-
クラスの変換について
-
java HashMapで数値データを取...
-
決まった拡張子のファイルだけ...
おすすめ情報