編集:申し訳ありませんが、実装されたsha512 cryptを使用していません。これは、ハッシュを計算するためのソルト値や指定されたラウンド数が含まれていないことがわかるためです。
さて、私はc#でsha-512 cryptをコーディングしていて、ここにある手順に従っています...
http://people.redhat.com/drepper/SHA-crypt.txt
暗号化に関連することを行うのはこれが初めてなので、手順を正しく理解していることを確認したいと思います... cからc#への変換を指示するのに十分なcコードを理解していません:/
ダイジェストを終了することは、ハッシュを計算することと同じだと思います。この場合、ステップが完成したダイジェストを参照する場合、ハッシュ前の計算されたダイジェストバイトではなく、計算されたハッシュを参照していると仮定しました。私が間違っていたら訂正してください!
ステップ1〜8ですべてが正しく行われたと仮定すると、私の疑問はステップ9から始まります。
9.パスワード文字列の32バイトまたは64バイトのブロックごとに(C表現の終了NULを除く)、ダイジェストBをダイジェストAに追加します。
SHA-512を使用しているので、ブロックサイズは64バイトです。
次のコードは望ましい結果を生み出しますか?
//FYI, temp = digestA from steps 1-3 (before expanding digestA for step 9)
//alt_result = computed digestB hash (64 byte hash)
for (cnt = key.Length; cnt > 64; cnt -= 64) //9
{
int i = 0;
ctx.TransformBlock(alt_result, 0, 64, digestA, temp.Length + 64 * i);
i++;
}
私が言ったことが正しいことを誰かが明確にできるなら、私はそれをいただければ幸いです。ありがとう!