AES加密,使用用户密码作为密钥c#



有没有办法用windows密码或密码哈希作为密钥来加密/解密数据?

事实上,我想为每个用户个性化数据,其他用户无法访问,而用户自己不知道这种加密/解密,我的意思是,我不想向用户索要密钥,但得到的密钥对所有用户来说都不一样

如果我为每个用户生成一个密钥,我必须将其存储在某个地方,其他人可以访问我生成的密钥并访问所有数据,所以我不想自己生成密钥

我想在C#和AES 中实现这个场景

如果您不关心密钥,并且希望将加密绑定到windows用户,则可以使用内置的windows DPAPI方法:ProtectedData。使用DataProtectionScope.CurrentUser进行保护。

根据这个答案,DPAPI根据操作系统使用不同的加密算法。(在Windows 10的情况下为AES(

直接来自文档的代码(略有修改(:

public static void Main()
{
// Create a simple byte array containing data to be encrypted.
byte [] secret = { 0, 1, 2, 3, 4, 1, 2, 3, 4 };
// Encrypt the data.
byte [] encryptedSecret = Protect( secret );
}
public static byte [] Protect( byte [] data )
{
// Encrypt the data using DataProtectionScope.CurrentUser. The result can be decrypted
// only by the same current user.
return ProtectedData.Protect( data, null, DataProtectionScope.CurrentUser );
}

请注意,如果您失去了对Windows帐户的访问权限,您将无法再解密加密数据!

存储在用户配置文件中的Windows Vault由Windows数据保护应用程序编程接口(DPAPI(保护此保护取决于用户的安全ID(SID(。用户的SID对于创建用户帐户的计算机是唯一的因此,仅在其他计算机上恢复以前备份的Vault是不够的。新计算机上的DPAPI密钥也需要更新,以便它们可以解密还原的Vault。

此外,建议使用额外的熵来加强加密。

最新更新