我有一个 byte[]
需要使用Base64进行编码并返回SecureString
。我目前的代码如下:
string privateString = Convert.ToBase64String(byteArray);
SecureString result = new SecureString();
foreach (char c in privateString)
{
result.AppendChar(c);
}
// wipe the byte array...
问题在于调用
Convert.ToBase64String
不安全,因为它会创建一个我无法销毁的托管字符串。
有没有一种安全的方法可以做到这一点?
byteArray
,其中包含未加密的内容,这个内容可能会被GC移动或通过快照泄漏,这已经意味着涉及到SecureString
几乎没有任何意义。它非常难以有效地使用,通常你不应该费心去使用,因为所提供的安全性是虚幻的。 - Jeroen Mostertbyte[]
比拥有一个string
更有用,因为你至少可以在完成后覆盖它(而不需要诉诸于unsafe
黑客技术)。但是,确实同意使用SecureString
等。 - Marc Gravellbyte[]
?”除非它是从虚无中创建的或者是从一个加密 RNG 调用中创建的,并确保跟踪了所有缓冲区,否则很可能涉及到另一个路径,在这个路径上复制了内存。狭窄的门通向SecureString
,而通向不安全数据副本的道路则很宽...(在考虑到从SecureString
出去的路径之前,当然还有这个主要原因,这个东西并不真正起作用。) - Jeroen Mostert