MSDN示例:这是Bug还是优化(X509Certificate2类)



我在MSDN页面中看到了一个很好的例子:http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.aspx

向下滚动到示例的一半,然后查看方法:

// 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

由于下一行是Seeking to position"4",因此错误被掩盖了。我说得对吗?或者,这是故意的吗?即,某种奇怪的优化,因为我们知道(在这个例子中)AES密钥和IV的长度将足够小,可以容纳在3个字节中,所以只读取3个字节,然后跳到4个字节,从而节省从磁盘上读取1个字节的时间?

如果优化。。。。真正地

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

这种范式倾向于(例如)只使用三个字节,而实现在那里存储其他信息。

这里并不是说是这样,但你可能想了解某些大公司将字段用于自己目的的历史,尽管标准上说,la"拥抱、扩展、熄灭":-)

相关内容

  • 没有找到相关文章

最新更新