代码之家  ›  专栏  ›  技术社区  ›  dabljues

使用SHA512散列密码以加密数据

  •  0
  • dabljues  · 技术社区  · 7 年前

    我有一个C#应用程序,有时需要加密一些数据(XML文件)。基本上,问题是我不能将任何密钥存储在服务器上,或者直接存储在代码中 .NET 例如,应用程序可以很容易地分解 dotPeek .

    所以基本上我的应用程序会加密XML文件并将其保存在磁盘上,然后能够对其进行解密。

    我想出了一个主意,每当用户想要加密/解密数据时,我都会请求一个密码短语。该密码短语将使用SHA512散列,产生的字节将用作加密数据的密钥。然后,如果用户想要解密文件,会再次要求他们提供密码短语,并使用该密码短语解密文件(如果用户输入错误的密码短语,可能会失败)。

    所以我的第一个问题是:这真的是个好主意吗?

    我的第二个问题是关于实施的。我有散列、序列化、反序列化,但我不知道应该使用哪种加密算法(我想不是RSA,因为要加密的数据会很长),然后我可以将密码作为密钥传递给该算法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Luke Joshua Park    7 年前

    您偶然发现了键派生函数(KDF)的概念。你的建议是,尽管有一些不同,但这是一个非常好的想法,而且经常使用。一个小问题是,单是SHA-512并不是一个好的KDF。我建议您阅读PBKDF2(在.NET中,实现名为 Rfc2898DeriveBytes ).bcrypt和argon2等密码哈希也是非常可行的选择。

    关于你关于加密算法的问题,AES目前被认为是“标准”对称加密算法。然而,还有许多其他可行的选择。只要确保你没有使用DES或Triple DES,它们是过时的算法。还要确保您使用的是安全阻止模式。GCM可以说是“最好的”。