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

C# 使用用户密码作为密钥c的AES加密#,c#,encryption,C#,Encryption,有没有办法用windows密码或密码哈希作为密钥加密/解密数据 实际上,我想对其他用户无法访问的每个用户的数据进行个性化设置,而用户自己不知道这种加密/解密,我的意思是,我不想向用户索要密钥,而是获取一个对所有用户都不相同的密钥 如果我为每个用户生成一个密钥,我必须将其存储在某个地方,其他人可以访问我生成的密钥并访问所有数据,因此我不想自己生成密钥 我想在C#和AES中实现这个场景如果您不关心密钥,并且希望将加密绑定到windows用户,则可以使用内置的windows DPAPI方法:使用Dat

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

实际上,我想对其他用户无法访问的每个用户的数据进行个性化设置,而用户自己不知道这种加密/解密,我的意思是,我不想向用户索要密钥,而是获取一个对所有用户都不相同的密钥

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


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

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

根据,DPAPI根据操作系统使用不同的加密算法。(如果是Windows 10,则为AES)

直接来自文档的代码(稍微修改):

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

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


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

如果您不关心密钥并希望将加密绑定到windows用户,则可以使用内置的windows DPAPI方法:使用
DataProtectionScope.CurrentUser
@kapsiR是,这是我想要的,谢谢,请将此添加为答案。如果您需要编辑问题,请首先使用si@kapsiR评论作为答案。现在,它只是建议你可以做些什么,但并不能回答这个问题。一般来说,最好问“我想做X,我试过Y”和“如何做Y”。
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 );
}