Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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解密密码#_C#_Visual Studio_Passwords_Encryption - Fatal编程技术网

C# 加密&;使用C解密密码#

C# 加密&;使用C解密密码#,c#,visual-studio,passwords,encryption,C#,Visual Studio,Passwords,Encryption,我想创建一个应用程序,可以使用C#加密和解密我的密码 我的想法很简单。我将使用子字符串从输入的字符串中提取每个字母,然后操作ASCI代码并将其转换为另一个字母。我将使用相同的方法对它们进行加密 有人解密我生成的密码有多困难 我正在寻找建议或示例代码。是出了名的不安全。放弃这种方法是徒劳的。对密码保护做更多的研究。是出了名的不安全。放弃这种方法是徒劳的。对密码保护做更多的研究。在.NET中有很多安全的加密方法。我认为与其尝试自己实现一个解决方案,不如看一看。在.NET中有很多安全的加密方法。我认为

我想创建一个应用程序,可以使用C#加密和解密我的密码

我的想法很简单。我将使用
子字符串
从输入的字符串中提取每个字母,然后操作ASCI代码并将其转换为另一个字母。我将使用相同的方法对它们进行加密

有人解密我生成的密码有多困难


我正在寻找建议或示例代码。

是出了名的不安全。放弃这种方法是徒劳的。对密码保护做更多的研究。

是出了名的不安全。放弃这种方法是徒劳的。对密码保护做更多的研究。

在.NET中有很多安全的加密方法。我认为与其尝试自己实现一个解决方案,不如看一看。

在.NET中有很多安全的加密方法。我认为与其尝试自己实现一个解决方案,不如看一看。

有一些库可以为您加密数据。他们的加密算法比你能想到的任何东西都要好。使用它们。

有一些库可以为您加密数据。他们的加密算法比你能想到的任何东西都要好。使用它们。

很少有理由存储密码的加密版本。这会造成安全漏洞。相反,通常最好将密码的单向散列(例如使用SHA1)与随机salt组合存储。然后总是将输入密码的哈希值与存储在数据库中的哈希值进行比较,而不是实际比较密码

这种方法的好处是,即使用户获得了对数据库的访问权,也没有人能够确定用户的密码是什么。而salt使相同的密码看起来彼此不同

下面是使用
System.Security.Cryptography
命名空间创建随机salt的示例

byte[] salt = new byte[10];
RandomNumberGenerator.Create().GetBytes(salt);
您可以将salt与密码组合,并生成单向散列,如下所示:

byte[]  passwordBytes = new byte[Encoding.UTF8.GetByteCount(password) + salt.Length];  // Create buffer for password bytes and hash
int passwordLength = Encoding.UTF8.GetBytes(password, 0, password.Length, passwordBytes, 0);
salt.CopyTo(passwordBytes, passwordLength);
byte[] hash = null;
using (SHA512Managed hasher = new SHA512Managed()) {
  hash = hasher.ComputeHash(passwordBytes);
}

存储哈希密码和salt。对用户进行身份验证时,使用与创建存储哈希时相同的salt对用户输入的密码进行哈希。将此新哈希值与数据库中的哈希值进行比较。

几乎没有理由存储密码的加密版本。这会造成安全漏洞。相反,通常最好将密码的单向散列(例如使用SHA1)与随机salt组合存储。然后总是将输入密码的哈希值与存储在数据库中的哈希值进行比较,而不是实际比较密码

这种方法的好处是,即使用户获得了对数据库的访问权,也没有人能够确定用户的密码是什么。而salt使相同的密码看起来彼此不同

下面是使用
System.Security.Cryptography
命名空间创建随机salt的示例

byte[] salt = new byte[10];
RandomNumberGenerator.Create().GetBytes(salt);
您可以将salt与密码组合,并生成单向散列,如下所示:

byte[]  passwordBytes = new byte[Encoding.UTF8.GetByteCount(password) + salt.Length];  // Create buffer for password bytes and hash
int passwordLength = Encoding.UTF8.GetBytes(password, 0, password.Length, passwordBytes, 0);
salt.CopyTo(passwordBytes, passwordLength);
byte[] hash = null;
using (SHA512Managed hasher = new SHA512Managed()) {
  hash = hasher.ComputeHash(passwordBytes);
}

存储哈希密码和salt。对用户进行身份验证时,使用与创建存储哈希时相同的salt对用户输入的密码进行哈希。将此新哈希值与数据库中的哈希值进行比较。

如果对它们进行双重加密,那么我将使用Cesar密码对它们进行加密2次或更多次@dotNET:嗯,不。任何一对凯撒密码都相当于一个不同的密码。不要试图发明你自己的密码术。@dotNet:Caesar-cypher是不安全的,毫无用处。有一双熟练的眼睛的人不用铅笔就能把它们弄碎。计算机加载程序破解程序所需的时间比实际破解程序所需的时间更长。当我说你应该在密码保护和加密方面做更多的研究时,我是非常认真的。理想情况下,您永远不会对密码应用对称加密。散列或非对称加密是更可行的选择。更不用说在.NET中,任何攻击者都可以简单地读取您的代码并找出您试图做什么!加密必须始终基于攻击者不会拥有的秘密。你不可能有任何基于攻击者不知道你的算法的安全方法。如果对它们进行双重加密,那么我将使用Cesar密码加密它们2次或更多次@dotNET:嗯,不。任何一对凯撒密码都相当于一个不同的密码。不要试图发明你自己的密码术。@dotNet:Caesar-cypher是不安全的,毫无用处。有一双熟练的眼睛的人不用铅笔就能把它们弄碎。计算机加载程序破解程序所需的时间比实际破解程序所需的时间更长。当我说你应该在密码保护和加密方面做更多的研究时,我是非常认真的。理想情况下,您永远不会对密码应用对称加密。散列或非对称加密是更可行的选择。更不用说在.NET中,任何攻击者都可以简单地读取您的代码并找出您试图做什么!加密必须始终基于攻击者不会拥有的秘密。你不可能有任何基于攻击者不知道你的算法的安全方法。我只是重新阅读了你的问题,我可能没有领会你的意思。如果您试图创建一种方法,以加密的方式存储各种来源的密码,那么这种方法显然不是您想要的。不过,我将把这个答案留给对身份验证方法感兴趣的人。我只是重新阅读了你的问题,我可能没有领会你的意思。如果您试图创建一种方法,以加密的方式存储各种来源的密码,那么这种方法显然不是您想要的。然而,我将把这个答案留给任何对身份验证方法感兴趣的人