2010-10-21 39 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