说明加密SHA-512算法(c#)
本文关键字:算法 加密 SHA-512 说明 | 更新日期: 2023-09-27 18:12:13
EDIT:对不起,我忘了说,我没有使用实现的sha512加密,因为据我所知,它不涉及盐值或指定的轮数来计算哈希。
好的,所以我在c#中编码sha-512加密,我遵循这里找到的步骤…
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++;
}
如果有人能澄清我所说的是正确的,我将不胜感激。谢谢!
Salting就像在输入字符串的末尾附加一个固定的字节字符串一样简单。本质上是为您的输入提供一个已知的"本地"转换。
关于算法本身:你似乎一开始就处于劣势。作为一个新手,你对基本的加密术语做了很多"假设",甚至需要澄清。如果CLR实现不适合你,我认为你最好把时间花在寻找一个好的C实现上,并弄清楚如何集成它。找出对它的互操作(外部)调用将比深入研究加密的复杂性要容易得多,结果将更有效,并且您获得的有关本机互操作的知识将更有用/可重用。
我将为以后可能遇到这个问题的其他人添加一些重要的澄清。
:SHA512和SHA512Crypt是两种不同的算法,用于两种不同的目的。SHA512是一种通用的散列算法(参见此)。SHA512Crypt是一种密码存储或基于密码的密钥派生算法,它在内部使用SHA512(哈希)(参见此)。SHA512Crypt基于早期的Crypt函数,该函数使用MD5而不是SHA512。
密码存储/密钥生成算法是专门创建的,使其暴力破解的成本提高了几个数量级。典型的方法是以某种方式遍历底层哈希算法。然而,你不想自己去做这件事……这让我们想到……
第二:不要编写自己的加密方法。即使你很清楚自己在做什么,也有很多方法会把事情搞砸。
如果你不想使用内置的Rfc2898DerviceBytes,因为它是基于SHA1的,那么你可以看看bcrypt或其他一些公开的,审查过的已知加密算法的实现。