微软有标准的生成密码哈希值的方法吗?

3

有没有使用微软开发工具生成密码哈希的标准方法?或者可能有最常见的方法。(我已经读到了MD5,STA1)

不幸的是,我没有服务器的源代码,但必须消耗SOAP web服务。必须有一些算法来生成哈希码。我需要使用Java或使用某个库来实现它。

这是我需要发送给服务器的SOAP请求的一部分。请看oldPasswordHash。

- <ChangePassword xmlns="urn:____________">
  <sessionGUID>{864da5f3-21b6-486a-8bd3-c507ae3d224e}</sessionGUID> 
  <oldPasswordHash>089ad55bd0a8f6d3c2e2bbf0e4e1475c7e984ef1</oldPasswordHash> 
  <newPasswordHash>f4a69973e7b0bf9d160f9f60e3c3acd2494beb0d</newPasswordHash> 
  </ChangePassword>

这看起来像是一个SHA1哈希。只是猜测而已。 - Pieter van Ginkel
3个回答

7

这些是未加盐密码的SHA1哈希值。

f4a69973e7b0bf9d160f9f60e3c3acd2494beb0dPassw0rd! 的SHA1哈希值。

我能够使用彩虹表服务之一来反转其中一个哈希值,这表明没有加盐的密码哈希非常不安全。

在C#中,您可以像这样重新实现:

public static string Hash(string value)
{
   var sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
   byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(value));
   return BytesToHex(hash).ToLower();
}

private static string BytesToHex(byte[] bytes)
{
   return String.Concat(Array.ConvertAll(bytes, x => x.ToString("X2")));
}

如果您需要Java版本,请查看“sha1 java”的谷歌搜索结果中排名第一的网页


1
关于哈希算法,你需要一个加密哈希函数,它是一种几乎不可能被逆转的哈希函数。同时,请注意存在着文件(甚至网站)致力于计算每个字符串的哈希码并公布这些所谓的彩虹表。(对我来说,SHA256似乎是一个很好的选择)
关于程序生成,请看看.NET中的System.Security.Cryptography
至于创建哈希的工具,我不知道Windows自带有什么。显然,你可以通过Cygwin(或类似工具)使用GNU工具,或者搜索已经选择的算法的命令行工具。

1

针对Windows的Cygwin提供了命令行哈希工具,例如其coreutils包中的sha1sum,可以轻松地为您计算哈希值。Bouncy Castle库将提供Java和.NET中最常见哈希算法的实现。

示例XML并没有提供太多信息。字符串是十六进制的,长度为40个字符,即20字节或160位。这可能意味着它是SHA-1(即160位),但不一定如此。此外,它如何从密码生成哈希值。密码是明文、明文加盐、明文混合其他哈希等等。我猜如果您首先从命令行安装sha1sum,然后将密码输入其中,您就可以看到发生了什么。您可能会有好运并发现它在做什么。然后,您可以继续使用Bouncy Castle编写相应的代码。


3
除非使用旧版的Java运行环境,否则无需使用Bouncy Castle。较新版本的Java包含了一个不错的JCE实现。 - Qwerky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接