c# - crypt SHA-512 算法的说明 (c#)

标签 c# encryption salt crypt sha512

编辑:抱歉,我忘了提及,我没有使用实现的 sha512 加密货币,因为据我所知,它不涉及盐值或指定的计算轮数哈希值。

好吧,我正在用 C# 编写 sha-512 密码,并且按照此处找到的步骤进行操作...

http://people.redhat.com/drepper/SHA-crypt.txt

这是我第一次做任何与加密相关的事情,所以我想确保我正确理解了这些步骤...我不太了解 C 代码,无法直接从 C 转换为 C# :/

我假设完成摘要与计算哈希值相同。在这种情况下,我还假设当步骤引用完成的摘要时,它们引用计算的哈希,而不是预哈希计算的摘要字节。如果我错了请纠正我!

假设步骤 1-8 的所有操作都已正确完成,我的怀疑从步骤 9 开始

<强>9。对于密码字符串中的每个 32 或 64 字节 block (不包括 C 表示中的终止 NUL),将摘要 B 添加到摘要 A

由于我使用 SHA-512,因此 block 大小为 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++;
}

如果有人能澄清我所说的是正确的,我将不胜感激。谢谢!

最佳答案

加盐就像在输入字符串末尾附加固定字节字符串一样简单。本质上是为您的输入提供已知的“本土”转换。

关于算法本身:你似乎一开始就处于劣势。作为新手,您对基本加密术语做出了很多“假设”,甚至需要澄清。如果 CLR 实现不适合您,我认为您最好将时间花在寻找良好的 C 实现并弄清楚如何与其集成。弄清楚对此的互操作(外部)调用将比深入研究加密的复杂性要容易得多,结果将更加有效,并且您获得的有关 native 互操作的知识将更加有用/可重用。

关于c# - crypt SHA-512 算法的说明 (c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850706/

相关文章:

c# - 为什么 WinRT 是非托管的?

javascript - 通过文件上传添加新数据

c# - Web 部署任务失败。 ( 'Microsoft.Web.Deployment.DeploymentManager' 的类型初始值设定项抛出异常。)

java - Python Blowfish 加密

JAVA解密错误: Needs Input to be multiple of 16

linux - 创建新用户时如何创建用户密码散列的盐,之后与 crypt() 一起使用?

c# - Windows.Form 不触发 keyDown 事件

javascript - 有人认识这种公钥吗?

ios - iOS 是否有一个唯一的设备 ID,我可以用它来加盐密码哈希?

node.js - data 必须是字符串,salt 必须是 salt 字符串或轮数