首先,请忽略没有盐。我删除了盐,以尽可能简化事情。
以下内容始终输出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
这里发生了什么?
答案 0 :(得分:3)
查看Convert.ToBase64String(hashedBytes)
的位置?它没有给你一个十六进制字符串(每个字符4位) - 它在64位(每个字符6位)。
答案 1 :(得分:0)
您正在将其转换为Base64字符串...
您可能想要使用此代码:
// Cut bad code
编辑:这又是一个穷人在上面发布的BitConverter.ToString()的实现。为什么在搜索“字符串到十六进制”等常用功能时,互联网上充满了对现有框架功能的重新实现? - (