2011-06-10 302 views
2

嗨,大家好,我需要根據給定的密鑰在.net中根據FIPS 186-2生成一個隨機數(160字節)(討論可以在RFC 4186上找到) - 實現)。我知道FIPS 186-2是作爲DSA在.net上實現的,它將提供40字節的簽名字節而不是160.有人能告訴我我做錯了什麼嗎?基於FIPS的僞隨機數生成器186-2

+1

160字節或160位?更好地檢查。 – 2011-06-10 09:32:44

+0

讓我檢查RFC 4186上關於文檔如何與1280位散列值一起出現的過程。 – powerbox 2011-06-10 09:53:26

回答

2

您需要在RFC 4186附錄B(或FIPS 186-2的附錄3)中實現該算法。在.NET框架中沒有實現它。由於這種情況下的算法用於密鑰推導,因此不能用另一個隨機數生成器替換它。

在此過程中,您還需要重新實現大多數SHA-1,因爲所需的G函數是SHA-1的壓縮函數,無法從公共接口訪問.NET框架。

好運:-)

+0

Yap這就是我正在尋找的,我沒有任何密碼學背景開始。 – powerbox 2011-06-10 13:12:10

+1

工作的最大部分將是SHA-1壓縮功能。一個好的起點是這樣的:http://www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/crypto/digests/Sha1Digest.cs?view=markup – 2011-06-10 17:20:38

+0

我已經讀了很多關於這個壓縮現在我正在尋找sha1添加一些填充之前的那部分,根據我的理解,我不應該使用上面討論的相同散列來填充填充。 – powerbox 2011-06-10 21:15:26

1

不是我的區域,但我認爲FIPS 186使用160 鍵和鹽(或種子)。這隻有20個字節。

在任何情況下,System.Security.Cryptography.RandomNumberGenerator都會爲您快樂地填充任意長度的字節數組。密碼工作被認爲是安全的。

0

我修改找到的代碼在SHA1 Source code

訣竅是墊與所述消息(512 - message.length在比特)SECURE HASH STANDARD

定義0代替填充

如果散列消息是在六列使用:

message = message.PadRight((512/4),'0'); 

用於模和模運算我使用或g.BouncyCastle.Math.BigInteger