我是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
您是否知道导致此错误的原因以及如何解决?
答案 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
中的更多加密算法。