哪种加密算法用于密码保护数据?

问题描述:

我目前正在考虑为我的C#类的最终项目做些事情。我想到的是一个受密码保护的数据存储应用程序,需要密码才能访问存储在二进制文件中的数据。哪种加密算法用于密码保护数据?

问题是我不确定使用哪种加密,如果我决定做这个项目。

什么加密最适合这种情况?哪种加密最好?

只是稍微多了解我的计划。

首先,用户必须指定用户名/密码信息才能保存数据。数据将被保存在二进制文件中,以后应该能够在登录信息正确后查看。

+2

我清除了所有的评论,我对两个想法也做了很多/最/所有的答案。如果你*请阅读问题*,那么你会注意到他所要求的是一个类似LastPass的系统。 **关于“永远不要做这件事,总是哈希”的所有评论和答案都是纯粹的基础**。如果LastPass突然决定我不能从他们的系统中检索任何密码,我会非常沮丧,因为没有阅读规范的人会决定散列所有内容。 –

+1

@ LasseV.Karlsen:如果你花时间阅读最初的,未经编辑的问题,你会意识到为什么大多数答案都朝着这个方向前进。 “密码存储应用程序”在这个意义上是不明确的,我仍然认为我们的答案对OP的问题作出了贡献。虽然在您添加*您的*评论时,答案*是*“平淡无奇”,您删除的评论允许OP达到了解她/他的问题并修改它的问题,恕我直言。但我想我们仍然可以为更新的问题添加新的答案。 – Groo

+1

这个问题似乎只是说他想要一个需要身份验证的应用程序才会显示二进制文件的内容。所以这意味着文件应该被加密,并且一旦用户登录,他们可以查看内容,如果不是这种情况,应该改变问题以更接近地反映实际问题。 – Grofit

我想你应该去AESCTR mode

可以找到Rijndael(AES的底层密码)的C#实现here

加密算法可能没有这样的东西,但它是其他人正在使用的正确的算法。

为了进一步澄清:

这是加密的工作原理:

Plaintext -> [encryption] -> Ciphertext -> [decryption] -> Plaintext 

这是你必须使用一个密码管理器是什么。

这是散列如何工作的:

Message -> [hashing] -> Hash -> [???] -> Message 

你可以(也应该)使用散列算法来存储用于身份验证数据库(散列)密码(例如登录到网站)。为此,您使用盐或基于密钥的消息认证代码。

而不是“散列”存储在数据库中的散列,您只需散列用户输入并验证它是否匹配。这是而不是适用于像密码管理器这样的应用程序。

使用密码安全散列函数(如SHA-512),目前不可能“去散列”,即,即使您知道散列,也无法检索该消息。

+0

@丹尼斯:所以哈希在我的情况是不可能的。太棒了,因为这给我带来了很大的困惑。你的加密方案看起来像是我需要的。 +1。我会查找AES和CTR的主题。 – HelpNeeder

不知道这是否是对您问题的回答,但许多存储用户名和密码的系统往往只是对密码进行哈希处理,因此您绝不会实际存储用户密码,而只是单向散列版本。这样,当他们尝试再次登录时,您只需输入密码并将其与现有密码进行比较即可。

MD5是最简单的一种,但我相信SHA256/512是最好的选择之一,但这是一种单向哈希算法,如果您需要永远不会适用于您的情况可以访问密码的纯文本版本。通常这不是一个问题,因为您可以让他们更改密码,并且用户永远不需要以纯文本形式查看密码。

如果你不能使用单向哈希,那么只需使用blowfish或其他一些简单的双向加密算法。互联网充满了不同的.net加密提供商。如果这是作业,我不认为它真的很重要,只要你可以显示你为什么和何时使用加密的工作知识,你应该得到标记。