サーバー側で実行されているC#のアルゴリズムがあり、base64でエンコードされた文字列をハッシュします。
byte[] salt = Convert.FromBase64String(serverSalt); // Step 1
SHA256Managed sha256 = new SHA256Managed(); // Step 2
byte[] hash = sha256.ComputeHash(salt); // Step 3
Echo("String b64: " + Convert.ToBase64String(hash)); // Step 4
次に、ハッシュはハッシュのデータベースリストと照合されます。C#からWebSocketを介して送信されるserverSaltを使用して、javascriptでも同じことを実現したいと思います。
C#とJavascriptの文字列エンコーディングが異なるため、SHA-256ハッシュはC#とJavascriptで異なることを知っています。しかし、バイト配列にゼロを埋め込んで、JavascriptをC#として動作させることができることはわかっています(上記の手順1は解決されています)。
var newSalt = getByteArrayFromCSharpString(salt); // Pad zeros where needed
function getByteArrayFromCSharpString(inString)
{
var bytes = [];
for (var i = 0; i < inString.length; ++i)
{
bytes.push(inString.charCodeAt(i));
bytes.push(0);
}
return bytes;
}
ステップ2、3、4を再現するために使用できるアルゴリズムについて誰かが洞察を提供できますか?
PS:すでに質問と回答がありますが、単一のコードスニペットはありません。