是否有与Microsoft生成密码哈希的标准方法?

时间:2010-10-21 08:30:59

标签: c# java visual-c++ hash passwords

是否有使用Microsoft开发工具生成密码哈希的标准方法? 或许也有最常见的方式。 (我读过有MD5,STA1)

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

以下是我需要发送到服务器的SOAP请求的一部分。看看oldPasswordHash。

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

3 个答案:

答案 0 :(得分:6)

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

f4a69973e7b0bf9d160f9f60e3c3acd2494beb0dPassw0rd!的SHA1哈希。

我能够使用a rainbow table service反转其中一个哈希,这表明没有salting的密码哈希是非常不安全的。

在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版本,请查看first google hit for "sha1 java"

答案 1 :(得分:1)

至于哈希算法,你需要一个cryptographic hash function,这是一个哈希函数(无论出于所有意图和目的)都无法反转。还要注意存在的文件(实际上是网站)努力计算每个字符串的每个哈希码并发布这些所谓的Rainbow Tables。 ( SHA256 对我来说似乎是个不错的选择。)

至于程序化生成,请查看.NET中的System.Security.Cryptography

至于创建哈希的工具,我知道Windows没有任何附带功能。显然,您可以通过Cygwin(或类似工具)使用GNU工具,或者搜索您选择的算法的命令行工具。

答案 2 :(得分:1)

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

示例XML并没有多说。字符串是十六进制,长度为40个字符,即20个字节或160位。这可能意味着它是SHA-1(160位)但不一定。另外,它是如何从密码生成哈希的。是密码明文,明文加盐,明文和其他哈希等等。我猜你是先从命令行安装sha1sum,你可以看看如果你输入密码会发生什么。你可能会很幸运并发现它在做什么。然后你可以继续使用Bouncy Castle编写等效代码。