C# 暗号化手法を PHP に変換しようとしています。C# コードは以下のとおりです。C# の経験はありません。C#でプロジェクトを引き継ぐ必要がありました
private void button1_Click(object sender, EventArgs e)
{
//byte[] response = ComputeHash("pradeep14520", BitConverter.GetBytes("0x9A111B734E4F10469668"));
//byte[] response = ComputeHash("pradeep14520", dictionary.ElementAt(0).Value.Salt);
byte[] response =ComputeHash("pradeep14520", StringToByteArray("9A111B734E4F10469668"));
string hex = BitConverter.ToString(response).Replace("-", string.Empty);
string base64 = Convert.ToBase64String(response); // 683CA8E00E8CE41A079B7C86CE4960AC2376CD85F2AEAB2E4DF99FFA7F7FA4F3
}
private byte[] ComputeHash(string password, byte[] storedSalt)
{
byte[] passwordBytes = Encoding.Unicode.GetBytes(password);
if ((int)storedSalt.Length > 0)
{
byte[] passwordAndSalt = new byte[(int)passwordBytes.Length + (int)storedSalt.Length];
passwordBytes.CopyTo(passwordAndSalt, 0);
storedSalt.CopyTo(passwordAndSalt, (int)passwordBytes.Length);
passwordBytes = passwordAndSalt;
}
return new SHA256Managed().ComputeHash(passwordBytes);
}
ボタンクリック機能のサンプル応答をコメントしました。PHPを使用して同じ機能を実装しようとしました。このリンクを参照した後、以下のコードで
文字列はphpのバイト配列であるため、PHPでバイト配列を生成する必要がないことがわかりました。
$originalSalt = 'pradeep14520';
$originalSalt .= '9A111B734E4F10469668';
hash("sha256",iconv(mb_detect_encoding($originalSalt, mb_detect_order(), false), "UTF-8", $originalSalt),true);
生の出力を取得するために、最後の引数を false としてハッシュ関数に渡しました。しかし、PHP と C# で異なる出力が得られます
for PHP :afc80d1a6cae81e8f868b054dafbb74bdd86399d771fceef574e4b373506b704
for C# :683CA8E00E8CE41A079B7C86CE4960AC2376CD85F2AEAB2E4DF99FFA7F7FA4F3
助けてください。前もって感謝します。
Daniel Hilgarth から提供された提案に基づいて、コードを修正して機能させました。
$password = 'pradeep14520';
$originalSalt = hex2bin('9A111B734E4F10469668');
echo strtoupper(hash("sha256",mb_convert_encoding($password,"UTF-16LE").$originalSalt,false));
私はそれが誰かを助けることを願っています..