Security 安全架构.NET

Security 安全架构.NET,security,hash,Security,Hash,你好 我已经想到了一个项目的安全模式,我很好奇它是否非常非常安全 我在数据库中存储了GetNonZeroBytes(byte[16]对象)方法的RNGCryptoServiceProvider()base64字符串,我将其用作Salt 接下来,我使用Salt生成密码的Scrypt加密(就像bCrypt一样,它允许我选择RAM的数量和其他类似的东西——在这个场景中,我使用8mb的RAM来加密密码)。我使用之前的输出和Salt初始化Rfc2898DeriveBytes(加密输出,Salt,10000

你好

我已经想到了一个项目的安全模式,我很好奇它是否非常非常安全

我在数据库中存储了GetNonZeroBytes(byte[16]对象)方法的RNGCryptoServiceProvider()base64字符串,我将其用作Salt

接下来,我使用Salt生成密码的Scrypt加密(就像bCrypt一样,它允许我选择RAM的数量和其他类似的东西——在这个场景中,我使用8mb的RAM来加密密码)。我使用之前的输出和Salt初始化Rfc2898DeriveBytes(加密输出,Salt,10000)实例

public static string GetBase64StringSafeString(string SaltSource, string StringToEncrypt, int memoryCost)
    {
        byte[] Salt = Encoding.ASCII.GetBytes(SaltSource);
        byte[] derivedBytes = new byte[64];

        SCrypt.ComputeKey(Encoding.ASCII.GetBytes(StringToEncrypt), (new Rfc2898DeriveBytes(SaltSource, Salt, 10000)).GetBytes(25), (memoryCost != 0 ? memoryCost : 8192), 8, 1, null, derivedBytes);
        return Convert.ToBase64String(derivedBytes);
    }
我使用它为块大小为256的RijndaelManaged算法生成密钥和IV。这就是我用来将数据加密到数据库中的方法,因此对于这个算法,我不必将密码存储在任何地方:我所要做的就是检查用户编写的密码是否正确,以便解密数据。如果是,则对用户进行身份验证

因为黑客的主要目的是获取数据,所以他需要密码。如果他有密码,他可以登录并获取数据或解密数据库中的数据。为了获得密码,他必须在找到匹配项之前运行该版本的bCrypt,并解密数据库中的数据,他必须这样做,然后使用Rfc2898DerivedBytes运行RijndaelManaged

我认为这样做更安全的唯一方法是找到一种除明文以外的存储盐的方法


你觉得怎么样

你可能想问问我