Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪种加密算法用于密码保护数据?_C#_Cryptography - Fatal编程技术网

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

C# 哪种加密算法用于密码保护数据?,c#,cryptography,C#,Cryptography,我目前正在考虑做一些事情,作为我C#班的最后一个项目。我想到的是一个受密码保护的数据存储应用程序,它需要密码才能访问存储在二进制文件中的数据 问题是,如果我决定做这个项目,我不确定使用哪种加密 什么加密最适合这种情况?哪种加密是最好的 再多了解一点我的计划 首先,用户必须指定用户名/密码信息以保存数据。数据将保存在二进制文件中,在登录信息正确后可以查看该文件。我认为您应该使用 可以找到Rijndael(AES的底层密码)的C#实现 可能没有所谓的最佳加密算法,但它是其他所有人都在使用的正确的加密

我目前正在考虑做一些事情,作为我C#班的最后一个项目。我想到的是一个受密码保护的数据存储应用程序,它需要密码才能访问存储在二进制文件中的数据

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

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

再多了解一点我的计划


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

我认为您应该使用

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

可能没有所谓的最佳加密算法,但它是其他所有人都在使用的正确的加密算法

进一步澄清:

这就是加密的工作原理:

Plaintext -> [encryption] -> Ciphertext -> [decryption] -> Plaintext
这是密码管理器必须使用的

这就是散列的工作原理:

Message -> [hashing] -> Hash -> [???] -> Message
您可以(也应该)使用哈希算法在数据库中存储(哈希)密码以进行身份验证(例如登录网站)。为此,可以使用salt或基于密钥的消息身份验证代码

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


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

我认为您应该加入

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

可能没有所谓的最佳加密算法,但它是其他所有人都在使用的正确的加密算法

进一步澄清:

这就是加密的工作原理:

Plaintext -> [encryption] -> Ciphertext -> [decryption] -> Plaintext
这是密码管理器必须使用的

这就是散列的工作原理:

Message -> [hashing] -> Hash -> [???] -> Message
您可以(也应该)使用哈希算法在数据库中存储(哈希)密码以进行身份验证(例如登录网站)。为此,可以使用salt或基于密钥的消息身份验证代码

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


使用加密安全的散列函数(如),目前无法“去散列”,即,即使您知道散列,也无法检索消息。

不确定这是否是您问题的答案,但许多存储用户名和密码的系统往往只对密码进行散列,因此,您从来没有实际存储用户密码,只是单向散列版本的密码。这样,当他们再次尝试登录时,您只需将密码散列,并将其与现有密码进行比较

MD5是最简单的一种,但我相信SHA256/512是使用得最好的一种,尽管这是一种单向散列算法,如果您需要能够访问其密码的纯文本版本,则可能不适用于您的情况。通常这不是一个问题,因为您可以让他们更改密码,用户永远不需要以纯文本形式查看密码


如果不能使用单向散列,那么就使用blowfish或其他简单的双向加密算法。互联网上充斥着不同的.net加密提供商。如果这是家庭作业,我认为这并不重要,只要你能展示你为什么和何时使用加密的工作知识,你就应该得到分数。

不确定这是否是你问题的答案,但许多存储用户名和密码的系统往往只是散列密码,所以你从来没有真正存储用户密码,只是它的单向散列版本。这样,当他们再次尝试登录时,您只需将密码散列,并将其与现有密码进行比较

MD5是最简单的一种,但我相信SHA256/512是使用得最好的一种,尽管这是一种单向散列算法,如果您需要能够访问其密码的纯文本版本,则可能不适用于您的情况。通常这不是一个问题,因为您可以让他们更改密码,用户永远不需要以纯文本形式查看密码


如果不能使用单向散列,那么就使用blowfish或其他简单的双向加密算法。互联网上充斥着不同的.net加密提供商。如果是家庭作业,我认为这并不重要,只要你能证明你知道为什么和什么时候使用加密,你就应该得到分数。

我清除了所有的评论,我也不想对很多/大部分/所有的答案做同样的事。如果你读一下这个问题,你会注意到他问的是如何实现一个类似LastPass的系统。所有关于“永远不要这样做,总是散列”的评论和回答都是毫无根据的。如果LastPass突然决定我无法从他们的系统中检索任何密码,我会非常不安,因为没有阅读规范的人决定散列所有内容。@LasseV.Karlsen:如果你花时间阅读未经编辑的初始问题,你就会意识到为什么大多数答案都朝着这个方向。“密码存储应用程序”在这个意义上是含糊不清的,我仍然觉得我们的答案有助于OP的问题。IMHO说,虽然在你添加评论时,答案是“完全不正确的”,但你删除的评论让OP能够切中要害地理解她/他的问题并对其进行修改。但我想我们仍然可以为这个问题添加新的答案