IBuffer对象由WinRT中的加密例程返回并使用。在回答我之前的问题时,用户必须保持对这些缓冲区的任何安全管理 - 例如。覆盖内存,在主动不需要时加密等等。但是,与IBuffers下面的数据进行交互的方法在C#级别是有限的。
那么,C#开发人员如何正确管理这些IBuffers中的敏感数据?
答案 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.您当然可以使用不同的值你的选择: - )。