Я использую MySql DB и пытаюсь создать там пользователя.Пароль - это хеш.Когда я использую Context.Useraccount.add (User) и Context.SaveChanges (), добавление в базу данных работает нормально, но использование ExecuteSqlCommmand делает пароль неработоспособным.
var sql = @"INSERT INTO useraccount
(UserId,UserName,Password,CustomerId,PasswordSalt,CreatedDate)
VALUES
(@UserId, @UserName,@Password,@CustomerId, @PasswordSalt, @CreatedDate)";
int rows = _context.Database.ExecuteSqlCommand(
sql,
new MySqlParameter("@UserId", user.UserId),
new MySqlParameter("@UserName", user.UserName),
new MySqlParameter("@Password", user.Password),
new MySqlParameter("@CustomerId", user.CustomerId),
new MySqlParameter("@PasswordSalt", user.PasswordSalt),
new MySqlParameter("@CreatedDate", MySQLFormatDate));
Это дает следующее исключение: {MySql.Data.MySqlClient.MySqlException (0x80004005): Неверное строковое значение: '\ x90] \ x0E \ x80 \ xB1 \ xFF ...' для столбца «Пароль» в строке 1 ---> MySql.Data.MySqlClient.MySqlException(0x80004005): Неверное строковое значение: '\ x90] \ x0E \ x80 \ xB1 \ xFF ...' для столбца 'Пароль' в строке 1
Я попытался изменить значение столбца в БД на varbinary (из varchar), а затем я могу вставить его, но он становится большим двоичным объектом в БД и не работает, когда я пытаюсь прочитать его снова.
Как правильно отправить хэш в БД?
Редактировать --- код для создания хэша
private static void CreatePasswordHash(string password, out byte[] passwordHash, out byte[] passwordSalt)
{
if (password == null) throw new ArgumentNullException("password");
if (string.IsNullOrWhiteSpace(password)) throw new ArgumentException("Value cannot be empty or whitespace only string.", "password");
using (var hmac = new System.Security.Cryptography.HMACSHA512())
{
passwordSalt = hmac.Key;
passwordHash = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));
}
}
edit2 --- типы пароля - байты []
Это если я изменю пароль иТипы SaltedPassword в базе данных для VarBinary.Когда я использую VarChar, он выдает ошибку, которую я вставил ранее, и ничего не отправляется в БД.
Текстовое изображение
ОБНОВЛЕНИЕ - РЕШЕНО
Таким образом, у меня было неверное значение в modelbuilder.entity для пароля, который у меня был VarChar, когда он должен был быть VarBinary.Каким-то образом это работало с Context.Useraccount.add (Пользователь) и Context.SaveChanges (), хотя.
Спасибо всем за помощь!