我想创建一个可以使用C#加密和解密我的密码的应用程序。
我的想法很简单。我将使用Substring
从输入的字符串中提取每个字母,然后我将操纵ASCI代码并将其转换为另一个字母。我将使用相同的方法加密它们。
有人解密我生成的密码有多难?
我正在寻找建议或示例代码。
答案 0 :(得分:8)
在.NET中,有许多安全的加密方法。我认为,不应试图自己实施解决方案,而应该更好地了解System.Security.Cryptography。
答案 1 :(得分:7)
Caesar cyphers是不安全的。放弃这种方法毫无结果。进行更多关于密码保护的研究。
答案 2 :(得分:2)
有些库可以为您加密数据。他们的加密算法比你想出的任何东西都要好。使用它们。
答案 3 :(得分:2)
很少有理由存储加密版本的密码。这造成了一个安全漏洞。相反,通常最好存储密码与随机盐的单向散列(例如使用SHA1)。然后,您始终将输入密码的哈希值与存储在数据库中的哈希值进行比较,而不是实际比较密码。
这种方法的好处是,没有人可以确定用户的密码是什么,即使他或她获得了对数据库的访问权限。盐使相同的密码看起来彼此不同。
以下是使用System.Security.Cryptography
命名空间创建随机盐的示例。
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);
}
存储哈希密码和盐。在对用户进行身份验证时,请使用与创建存储哈希时使用的盐相同的哈希值来对用户输入的密码进行哈希处理。将此新哈希值与数据库中的哈希值进行比较。