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

时间:2011-09-05 06:54:02

标签: c# cryptography

首先,请忽略没有盐。我删除了盐,以尽可能简化事情。

以下内容始终输出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);
        }
    }
}

此应用程序的输出:

  

44
  K5NtMqCN7IuYjzccr1bAdajtfiyKD2xL15Eyg5oFCOc =

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

  

64
  2b936d32a08dec8b988f371caf56c075a8ed7e2c8a0f6c4b979132839a0508e7

这里发生了什么?

2 个答案:

答案 0 :(得分:3)

查看Convert.ToBase64String(hashedBytes)的位置?它没有给你一个十六进制字符串(每个字符4位) - 它在64位(每个字符6位)。

答案 1 :(得分:0)

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

您可能想要使用此代码:

 // Cut bad code

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