gpt4 book ai didi

c# - 从 Linq byte[] Concat 转换为旧的 .net Array 并考虑复制和长度

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:46 27 4
gpt4 key购买 nike

我的业务需要将应用程序保持在 .net 2.0 :(

因此在从 .net 4.5.1 恢复到 .net 2.0 然后删除

 using System.Linq;

我最终遇到了这行代码(以及其他几行)的错误我怎样才能解决这个问题以在 .net 2.0 中工作?

 byte[] hash = sha256.ComputeHash(passwordBytes.Concat(salt).ToArray());

“System.Array”不包含“Concat”的定义,并且找不到接受“System.Array”类型的第一个参数的扩展方法“Concat”(您是否缺少 using 指令或程序集引用?)

完整方法供引用:

public static byte[] CreatePasswordHash(string password, byte[] salt, int iterations = 60000)
{
using (var sha256 = SHA256.Create())
{
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);

// step 2
byte[] hash = sha256.ComputeHash(passwordBytes.Concat(salt).ToArray());

// step 3
byte[] result = sha256.ComputeHash(salt.Concat(hash).ToArray());

// step 4
for (int i = 0; i < iterations; i++)
{
result =
sha256.ComputeHash(salt.Concat(result).ToArray());
}

return result;
}
}

最佳答案

您似乎只想将两个数组连接成一个数组。您可以使用 Array.Copy 创建以下方法:

public static T[] ConcatArrays<T>(T[] array1, T[] array2)
{
T[] newArray = new T[array1.Length + array2.Length];

Array.Copy(array1, 0, newArray, 0, array1.Length);

Array.Copy(array2, 0, newArray, array1.Length, array2.Length);

return newArray;
}

然后像这样使用它:

public static byte[] CreatePasswordHash(string password, byte[] salt, int iterations = 60000)
{
using (var sha256 = SHA256.Create())
{
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);

// step 2
byte[] hash = sha256.ComputeHash(ConcatArrays(passwordBytes, salt));

// step 3
byte[] result = sha256.ComputeHash(ConcatArrays(salt, hash));

// step 4
for (int i = 0; i < iterations; i++)
{
result = sha256.ComputeHash(ConcatArrays(salt, result));
}

return result;
}
}

关于c# - 从 Linq byte[] Concat 转换为旧的 .net Array 并考虑复制和长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37600365/

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