2015-08-13 49 views
3

我看到這一點的同時編碼,並認爲這似乎有些奇怪:爲什麼RNGCryptoServiceProvider的構造函數忽略它的參數?

enter image description here

果然,MSDNRNGCryptoServiceProvider(byte[] rgb)RNGCryptoServiceProvider(string str)都忽略了它們的參數。 據我所知,這兩者之間沒有實際的區別和RNGCryptoServiceProvider()。到底是怎麼回事?我懷疑我錯過了一些與密碼相關的奇怪事情。

+0

你會期待該參數用於什麼? –

+1

@NikBougalis我期待着兩件事之一;這個論點可能是種子價值,或者他們不會提供無用的構造函數。由於這些都不是真的,我很困惑。 – sirdank

回答

1

它可能是從以前的舊版本中剩下的,可能會回到1.x甚至2.0 API包含相同的描述。然而,2.0和2.1 API可能同時發生變化。

如果你看一下Mono的源然後你發現

_handle = RngInitialize (rgb); 

_handle = RngInitialize (Encoding.UTF8.GetBytes (str)); 

,所以我推測該數據被用作提供隨機數發生器,用於平臺的附加或初始種子。這也是最有意義的。單聲道源通常儘可能遵循MS實現。

如果平臺提供的RNG是安全的,可能幾乎沒有必要從應用程序中對其進行播種。使用RNG作爲方法一遍又一遍地生成相同的流(即當參數用作初始種子時)充滿危險,特別是如果底層實現是未知的並且可能在平臺和系統更新之間不同。所以這將是一個很好的理由,以廢棄構造函數。

顯然,如果他們剛剛被刪除,那麼舊的來源將不再編譯。所以將實現保留爲空是更合理的,因爲結果實例無論如何都應該生成隨機數據。


最後,這只是一個(非常)受過教育的猜測,但原因並未在當前API文檔中指定。看起來,構造函數沒有被標記爲過時。換句話說,我期望從微軟的加密API文檔中獲得的所有東西。

相關問題