Проблема с копированием байта [] в другой байт [] - PullRequest
3 голосов
/ 25 февраля 2010

У меня есть метод для создания хешированного пароля. Однако это терпит крах в salt.CopyTo (pwd, 0); Говорит, что целевой байт [] слишком мал. Как мне решить проблему?

public static byte[] CreateHashedPassword(string password, byte[] salt)
        {
            SHA1 sha1 = SHA1.Create();
            byte[] pwd = CustomHelpers.StringToByteArray(password);
            salt.CopyTo(pwd, 0);
            sha1.ComputeHash(pwd);

            return pwd;            
        }

Ответы [ 3 ]

9 голосов
/ 25 февраля 2010

Вам нужно создать более длинный байтовый массив, который будет содержать и соль, и пароль:

    byte[] result = new byte[salt.Length + password.Length];
    salt.CopyTo(result, 0);
    password.CopyTo(result, salt.Length);
1 голос
/ 25 февраля 2010

Может как то так?

public static byte[] CreateHashedPassword(string password, byte[] salt) 
{ 
    SHA1 sha1 = SHA1.Create(); 
    byte[] pwd = CustomHelpers.StringToByteArray(password);
    byte[] pwdPlusSalt = new byte[salt.Length + pwd.Length];
    salt.CopyTo(pwdPlusSalt, 0); 
    pwd.CopyTo(pwdPlusSalt, salt.Length); 

    return sha1.ComputeHash(pwdPlusSalt);
}
0 голосов
/ 25 февраля 2010

Насколько велика соль? Вы собираетесь добавить к паролю?

Вот как добавить его в начало пароля:

byte[] pwdAndSalt = new byte[pwd.Length + salt.Length];
for (int i = 0; i < pwdAndSalt.Length; i++)
{
    if (i < salt.Length)
    {
        pwdAndSalt[i] = salt[i];
    }
    else
    {
        pwdAndSalt[i] = pwd[i - salt.Length];
    }
}
...