2012-02-22 32 views
0

我在這個MSDN頁看很好的例子:http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.aspxMSDN例子:這是一個錯誤或優化(X509Certificate2類)

向下滾動半路上的例子,並期待進入方法:

// Decrypt a file using a private key. 
private static void DecryptFile(string inFile, RSACryptoServiceProvider rsaPrivateKey) 

你會發現讀者在時間只讀取3個字節,而它正試圖讀取一個int的料流:

inFs.Seek(0, SeekOrigin.Begin); 
inFs.Read(LenK, 0, 3);// <---- this should be 4 
inFs.Seek(4, SeekOrigin.Begin);// <--- this line masks the bug for smaller ints 
inFs.Read(LenIV, 0, 3); // <---- this should be 4 

由於下一行是尋求ŧ o位置「4」,錯誤被掩蓋。我是否正確,或者是否有意爲之,即某種奇怪的優化,因爲我們知道(對於這個例子)AES密鑰和IV的長度將足夠小以容納3字節,所以只讀3,然後跳過到4,從而節省讀取1個字節的磁盤?

如果優化....真的嗎?

回答

1

我非常懷疑這是一個優化。磁盤讀取往往大於四個字節的塊,緩存幾乎使這種類型的優化無效,除非在極少數情況下四個字節可能跨越兩個不同的磁盤「扇區」(或任何磁盤讀取分辨率是)。

這種範例往往被看作在哪裏(例如)只有三個字節被使用,並且實現存儲其他信息。

不是說這是這裏的情況,但你可能想看看某些大公司的歷史使用領域爲自己的目的,儘管什麼標準說,一拉「擁抱,擴展,消滅」 :-)