2010-10-21 35 views
3

是否有标准的方法来使用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> 
+0

这看起来像一个SHA1哈希。只是一个猜测。 – 2010-10-21 08:35:23

回答

6

这些是未加密密码的SHA1散列值。

f4a69973e7b0bf9d160f9f60e3c3acd2494beb0dPassw0rd!的SHA1散列。

事实上,我能够通过a rainbow table service反转其中一个哈希值,表明密码哈希值没有腌制是非常不安全的。

在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

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

至于编程式生成,请看.NET中的System.Security.Cryptography

至于创建哈希的工具,我不知道Windows自带的东西。显然你可以通过Cygwin(或类似的)使用GNU工具,或者为你选择的算法搜索一个命令行工具。

0

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

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

+3

除非你有旧的JRE,否则你不需要充气城堡。较新版本的Java包含一个体面的JCE实现。 – Qwerky 2010-10-21 09:11:53