我正在制作与安全相关的计划,我想确保我以正确的方式这样做.当有人使用密码登录时,密钥会被解密并存储在变量中.当他们注销时,我希望内存中的数据被完全删除,而不仅仅是标记为已删除.我目前正在做以下事情:
public void Logout()
{
RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
for (var i = 0; i < 3; i++)
{
byte[] data = new byte[(int) Math.Round((double) (_phraseHash.Count()))];
rngCsp.GetBytes(data);
int randomNum = BitConverter.ToInt32(data, 0);
_phraseHash = randomNum.ToString();
}
LoggedIn = false;
_phraseHash = null;
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,这是否足以从系统中完全删除密钥(_phraseHash).
这甚至是必要的吗?我实际上并不知道内存中的数据是如何被删除的,我只是假设它有点类似于硬盘驱动器如何工作,其中字节被标记为删除并在其他需要空间时重写.
我想从我的服务器下载加密文件,解密并在本地保存.我想解密文件并在下载时将其写入本地,而不是等待下载完成,解密,然后将解密文件放在锚标记中.我想这样做的主要原因是,对于大文件,浏览器不必在内存中存储数百兆字节或几千兆字节.