【问题标题】:C# Return Value SHA256Managed is NULLC# 返回值 SHA256Managed 为 NULL
【发布时间】:2019-05-28 04:25:03
【问题描述】:

我有一个类,它负责根据我发送给它的内容生成哈希。但是,SHA256Managed.Create(text) 方法的返回总是返回null

以下是我的代码:

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

namespace Autenticacao_no_ASP_.NET_MVC.Utils
{
    public class Hash
    {
        public static string GerarHash(string texto)
        {
            SHA256 sha256 = SHA256Managed.Create(texto);
            byte[] bytes = Encoding.UTF8.GetBytes(texto);
            byte[] hash = sha256.ComputeHash(bytes);
            StringBuilder result = new StringBuilder();

            for (int i = 0; i < hash.Length; i++)
            {
                result.Append(hash[i].ToString("X"));
            }

            return result.ToString();
        }
    }
}

sha256 返回 null。

【问题讨论】:

  • FIPS 模式是否激活?
  • 我在哪里可以检查这个?
  • 好的,您传递给 Create() 的字符串可以是以下之一:SHA256ManagedSHA256CngSHA256CryptoServiceProvider。见docs.microsoft.com/en-us/dotnet/api/…
  • SHA256Managed.Create(texto) 是错误的。您在这里告诉它要使用的算法的名称,但 texto 不是算法的名称。
  • 是的,您可以尝试从您的 Create() 呼叫中删除 texto

标签: c# asp.net asp.net-mvc sha256


【解决方案1】:

创建 SHA256 的首选方式(使用 SHA256 选择实现):

SHA256 sha256 = SHA256.Create();

Create 的参数是算法的名称——你不需要传递一个,除非你使用基类来选择使用哪一个。要修复您的代码删除或使用正确的参数:

SHA256 sha256 = SHA256Managed.Create(); 

SHA256 sha256 = SHA256Managed.Create("SHA256");

请注意,这两个调用实际上都是由基类SHA256 实现的,首先只需选择“默认”实现。

请参阅SHA256.Create 以供参考。

【讨论】:

  • 是的,它是这样发生的:SHA256Managed.Create(文本),而正确的只是 SHA256Managed.Create()。谢谢!祝大家新年快乐!
猜你喜欢
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2019-08-19
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多