为什么这种计算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
这是怎么回事?
看到这里写着Convert.ToBase64String(hashedBytes)
了吗?它不是给你一个十六进制字符串(每个字符4位)-它是64进制的(每个字符6位)。
您正在将其转换为Base64字符串…
你可能想用这个代替:
// Cut bad code
编辑:这又是一个穷人的BitConverter.ToString()上面发布的实现。为什么在搜索"字符串到十六进制"等常见功能时,互联网上充满了现有框架功能的重新实现?, (