使用SHA512哈希密码以加密数据

时间:2018-11-18 23:40:01

标签: c# encryption

我有一个C#应用程序,有时必须在其中加密一些数据(XML文件)。基本上,问题是我无法在服务器上或直接在代码中存储任何密钥,因为RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.html [NC,L]应用程序可以很容易地用.NET进行反汇编。

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

我想出了一个想法,每次用户想要加密/解密数据时都要求输入密码。该密码将使用SHA512进行哈希处理,并且将所得的字节用作加密数据的密钥。然后,如果用户想要解密文件,则再次要求他们输入密码,然后使用该密码来解密文件(如果用户输入了错误的密码,则密码可能会失败)。

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

我的第二个问题是关于实现的问题。我有哈希,序列化,反序列化功能,但是我不知道应该使用哪种加密算法(我想不是RSA,因为要加密的数据确实很长),然后我可以将密码短语作为此算法的密钥吗?

1 个答案:

答案 0 :(得分:2)

您偶然发现了密钥派生函数(KDF)的概念。您所建议的是一个好主意,并且经常使用,但有一些区别。一个小问题是,单独使用SHA-512并不是一个好的KDF。我建议您阅读有关PBKDF2的信息(在.NET中,该实现称为Rfc2898DeriveBytes)。像bcrypt和argon2这样的密码哈希也是非常可行的选择。

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