2012-02-22 65 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

我非常怀疑这是一个优化。磁盘读取往往大于四个字节的块,缓存几乎使这种类型的优化无效,除非在极少数情况下四个字节可能跨越两个不同的磁盘“扇区”(或任何磁盘读取分辨率是)。

这种范例往往被看作在哪里(例如)只有三个字节被使用,并且实现存储其他信息。

不是说这是这里的情况,但你可能想看看某些大公司的历史使用领域为自己的目的,尽管什么标准说,一拉“拥抱,扩展,消灭” :-)