如何安全地管理通过Windows.Security.Cryptography生成的IBuffer对象?

时间:2015-10-30 17:25:59

标签: c# security windows-runtime uwp

继上一个问题之后:Do the IBuffer objects produced by the methods in Windows.Security.Cryptography.CryptographicBuffer have security features?

IBuffer对象由WinRT中的加密例程返回并使用。在回答我之前的问题时,用户必须保持对这些缓冲区的任何安全管理 - 例如。覆盖内存,在主动不需要时加密等等。但是,与IBuffers下面的数据进行交互的方法在C#级别是有限的。

那么,C#开发人员如何正确管理这些IBuffers中的敏感数据?

1 个答案:

答案 0 :(得分:1)

如果您愿意,可以在使用后擦除缓冲区,即使使用C#也是如此。这是一个方便的帮手:

public static class BufferExtensions
{
  public async static Task ClearContentsAsync(this IBuffer buff)
  {
    var writer = new DataWriter(buff.AsStream().AsOutputStream());
    for (var i = 0; i < buff.Capacity; i++)
      writer.WriteByte(42);
    await writer.StoreAsync();
  }
}

像这样使用:

  var buff = CryptographicBuffer.GenerateRandom(20);
  var before = buff.ToArray();
  await buff.ClearContentsAsync();
  var after = buff.ToArray();
  Debug.WriteLine("{0},{1},{2} - {3},{4},{5}", 
    before[0], before[1], before[2], after[0], after[1], after[2]);

请注意before(清除前复制)中的值是随机的,但after(清除后复制)中的值均为42.您当然可以使用不同的值你的选择: - )。