编辑:对不起,我忘了提及,我没有使用实现的 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++;
}
如果有人能澄清我所说的是正确的,我将不胜感激。谢谢!