我想尝试以最好的方式将 CryptUnprotectData windows API 函数和 .net SecureString 联系在一起。CryptUnprotectData 返回一个由字节数组和字节长度组成的 DATA_BLOB 结构。在我的程序中,这将是一个 Unicode UTF-16 字符串。SecureString 有一个构造函数,它接受一个 char* 和长度参数,所以我希望能够执行以下操作:
SecureString ss = SecureString((char*)textBlob.pbData, textBlob.cbData / 2);
这行得通,除了 UTF-16 是可变长度的,所以我真的不知道用什么作为长度参数。上面的示例假设 2 字节字符 (BMP),但对于其他平面,它可能最多为 4 字节。我需要知道字节数组中 UTF-16 字符的数量。在不复制内存中的值(从而损害安全性)的情况下,最好的方法是什么。我计划尽快清零并释放字节数组。