【问题标题】:MSDN Example: Is this a Bug or Optimization (X509Certificate2 class)MSDN 示例:这是错误还是优化(X509Certificate2 类)
【发布时间】:2012-02-22 04:21:25
【问题描述】:

我正在查看此 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)

您会注意到阅读器在尝试从流中读取 int 时,一次只读取 3 个字节:

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

由于下一行是寻找位置“4”,因此该错误被掩盖了。我是对的还是故意的,即某种奇怪的优化,因为我们知道(对于这个例子)AES Key 和 IV 的长度将小到可以容纳在 3 个字节中,所以只读 3 然后跳过到 4,从而节省从磁盘读取 1 个字节?

如果优化......真的吗??

【问题讨论】:

    标签: c# .net stream msdn x509


    【解决方案1】:

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

    这种范式往往出现在(例如)只使用三个字节并且实现在那里存储其他信息的地方。

    并不是说这里就是这种情况,但您可能想了解某些大公司将字段用于自己目的的历史,尽管标准说的是“拥抱、扩展、熄灭”:-)

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 2015-11-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      相关资源
      最近更新 更多