为什么这种计算SHA-256哈希的方法总是返回一个44个字符的字符串?

本文关键字:一个 44个 字符串 字符 计算 种计 SHA-256 哈希 为什么 方法 返回 | 更新日期: 2023-09-27 18:07:39

首先,请忽略这里没有盐。我把盐去掉了,以便尽可能地简化。

下面的命令总是输出一个44个字符的字符串:

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
namespace ConsoleApplication1
{
    class Program
    {
        private static HashAlgorithm hashAlgorithm = new SHA256CryptoServiceProvider();
        static void Main(string[] args)
        {
            string blah = ComputeHash("PasswordLongBlah646468468Robble");
            Console.WriteLine(blah.Length);
            Console.WriteLine(blah);
        }
        private static string ComputeHash(string input)
        {
            Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
            Byte[] hashedBytes = hashAlgorithm.ComputeHash(inputBytes);
            return Convert.ToBase64String(hashedBytes);
        }
    }
}

这个应用程序的输出:


44K5NtMqCN7IuYjzccr1bAdajtfiyKD2xL15Eyg5oFCOc =

如果我没弄错的话,输出应该是:

64
2 b936d32a08dec8b988f371caf56c075a8ed7e2c8a0f6c4b979132839a0508e7

这是怎么回事?

为什么这种计算SHA-256哈希的方法总是返回一个44个字符的字符串?

看到这里写着Convert.ToBase64String(hashedBytes)了吗?它不是给你一个十六进制字符串(每个字符4位)-它是64进制的(每个字符6位)。

您正在将其转换为Base64字符串…

你可能想用这个代替:

 // Cut bad code

编辑:这又是一个穷人的BitConverter.ToString()上面发布的实现。为什么在搜索"字符串到十六进制"等常见功能时,互联网上充满了现有框架功能的重新实现?, (