gpt4 book ai didi

c# - .net 中 Sha256 的更新功能在哪里?

转载 作者:太空狗 更新时间:2023-10-30 01:06:39 27 4
gpt4 key购买 nike

我在我的 C++ 代码中使用了 Sha256 类的更新函数来将几个字符串包含到一个哈希值中,但我在 .net 类 Sha256 中找不到这个函数。这个功能在Sha的C++实现、Java实现中都有,.net中没有?

C++ 示例代码:

l_ceSHA2.Init();
for ( l_dwordCnt = 0; l_dwordCnt < l_dwordHashRounds; l_dwordCnt++)
{
l_ceSHA2.Update( mp_strPassword, strlen( mp_strPassword )));
l_ceSHA2.Update( mp_byteSalt, 32 );
}
l_ceSHA2.Final( mp_byteCryptoKey);

因此,它类似于 PBKDF,但更简单。

Sha256 code in C for reference

最佳答案

您可以使用TransformBlock。这是一个显示如何操作的示例:

using System;
using System.Text;
using System.Security.Cryptography;

// Example code for using TransformBlock to hash data in chunks

namespace HashTest
{
class HashTest
{
static void Main(string[] args)
{
SHA256 hash = SHA256.Create();
ASCIIEncoding encoding = new ASCIIEncoding();
string password = "password";

// Hash a string using ComputeHash
string sourcetext = password;
Console.WriteLine(sourcetext);
byte[] sourcebytes = encoding.GetBytes(sourcetext);
byte[] hashBytes = hash.ComputeHash(sourcebytes);
string hashStr = BitConverter.ToString(hashBytes).Replace("-", "");
Console.WriteLine(hashStr);

// Hash exactly two copies of a string
// (used to cross verify other methods below).
Console.WriteLine();
sourcetext = password + password;
Console.WriteLine(sourcetext);
sourcebytes = encoding.GetBytes(sourcetext);
hashBytes = hash.ComputeHash(sourcebytes);
hashStr = BitConverter.ToString(hashBytes).Replace("-", "");
Console.WriteLine(hashStr);

// Hash a string using TransformFinalBlock
Console.WriteLine();
sourcetext = password;
sourcebytes = encoding.GetBytes(sourcetext);
Console.WriteLine(sourcetext);
hash.TransformFinalBlock(sourcebytes, 0, sourcebytes.Length);
hashBytes = hash.Hash;
hashStr = BitConverter.ToString(hashBytes).Replace("-", "");
Console.WriteLine(hashStr);

// At this point we've finalized the hash. To
// reuse it we must first call Initialize().

// Hash string twice using TransformBlock / TransformFinalBlock
Console.WriteLine();
hash.Initialize();
sourcetext = password;
sourcebytes = encoding.GetBytes(sourcetext);
Console.Write(sourcetext);
hash.TransformBlock(sourcebytes, 0, sourcebytes.Length, null, 0);
Console.WriteLine(sourcetext);
hash.TransformFinalBlock(sourcebytes, 0, sourcebytes.Length);
hashBytes = hash.Hash;
hashStr = BitConverter.ToString(hashBytes).Replace("-", "");
Console.WriteLine(hashStr);

// Hash string twice using TransformBlock in a loop

Console.WriteLine();
hash.Initialize();
sourcetext = password;
sourcebytes = encoding.GetBytes(sourcetext);
for (int i = 0; i < 2; ++i)
{
Console.Write(sourcetext);
hash.TransformBlock(sourcebytes, 0, sourcebytes.Length, null, 0);
}
Console.WriteLine();
hash.TransformFinalBlock(sourcebytes, 0, 0);
hashBytes = hash.Hash;
hashStr = BitConverter.ToString(hashBytes).Replace("-", "");
Console.WriteLine(hashStr);
}
}
}

关于c# - .net 中 Sha256 的更新功能在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14863105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com