散列密码算法问题

时间:2012-05-16 23:03:12

标签: c# mysql hash

我是C#wpf编程的新手,但我正在尝试连接MySQL数据库并哈希密码。不幸的是,当我实现算法时,我在此代码中遇到错误:

byte[] plainTextWithSaltBytes = new byte[plainTextBytes.Length + saltBytes.Length];
salt.CopyTo(plainTextWithSaltBytes, 0);
plainText.CopyTo(plainTextWithSaltBytes, salt.Length); 

错误是:

Error: no overload for method 'Copy To' takes 2 arguments Exceptions: System.ArgumentNullException System.ArgumentOutOfRangeException
enter code here

您是否知道导致此错误的原因以及如何解决?

2 个答案:

答案 0 :(得分:2)

您需要复制plainTextBytes,而不是plainText

   byte[] plainTextWithSaltBytes = new byte[plainTextBytes.Length + saltBytes.Length];
   salt.CopyTo(plainTextWithSaltBytes, 0);
   plainTextBytes.CopyTo(plainTextWithSaltBytes, salt.Length); 

答案 1 :(得分:1)

如果您需要进行简单的哈希,这段代码可能会加密您的密码:

String GetEncryptedPassword (String prmUser, String prmPassword)
{
    // Concatenating the password and user name.
    String encryptedPassword = prmUserName + prmPassword;

    // Converting into the stream of bytes.
    Byte[] passInBytes = Encoding.UTF8.GetBytes(encryptedPassword);

    // Encrypting using SHA1 encryption algorithm.
    passInBytes = SHA1.Create().ComputeHash(passInBytes);

    // Formatting every byte into %03d to make a fixed length 60 string.
    return passInBytes.Aggregate(String.Empty, (pass, iter) => pass += String.Format("{0:000}", iter));
}

此代码将为您提供一个包含60个字符的漂亮加密哈希值。但请记住,您无法从散列中重新生成原始用户名和密码,因为这是一种单向算法。您可以使用System.Security.Cryptography中的更多加密算法。