私は自分のアプリケーションのログインシステムを作ろうとしていますが、ユーザーが登録を行っている間にパスワードを2回書いて正しいパスワードであることを確認します。登録後にユーザーパスワードをハッシュしないと、登録はスムーズに実行されますが、ハッシュした後、SQLデータベースに保存しようとしている間に例外が発生します。どのように私はこの問題に対処する必要がありますか?比較フィールドのために暗証番号がハッシュされているパスワード
ユーザーモデル
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace TimeTrackerProject.Models
{
[Table("Users")]
public class Users
{
[Key]
public int Iduser { get; set; }
[Required(ErrorMessage = "Email is required")]
[RegularExpression(@"^([\w-\.]+)@((\[[0-9]{1,3]\.)|(([\w-]+\.)+))([a-zA-Z{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter valid email.")]
public String Email { get; set; }
[Required(ErrorMessage = "Firstname is required")]
public String Firstname { get; set; }
[Required(ErrorMessage = "Surname is required")]
public String Surname { get; set; }
[Required(ErrorMessage = "Password is required")]
[DataType(DataType.Password)]
public String Password { get; set; }
[Compare("Password", ErrorMessage = "Please confirm your password")]
[DataType(DataType.Password)]
public String ComfirmPassword { get; set; }
[Required(ErrorMessage = "Function is required")]
public String Function { get; set; }
public Boolean Active { get; set; }
[ForeignKey("RoleId")]
public virtual Roles role { get; set; }
public int? RoleId { get; set; }
}
}
暗号クラス
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
namespace TimeTrackerProject
{
public static class Crypto
{
public static string Hash(string value)
{
return Convert.ToBase64String(
System.Security.Cryptography.HMACSHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(value))
);
}
}
}
登録コントローラ方法
public ActionResult Register(Users account)
{
if (ModelState.IsValid)
{
account.Password = Crypto.Hash(account.Password);
account.ComfirmPassword = Crypto.Hash(account.ComfirmPassword);
using (TimeTrackerEntities db = new TimeTrackerEntities())
{
db.Users.Add(account);
db.SaveChanges();
}
ModelState.Clear();
ViewBag.Message = account.Firstname + " was successfully registered.";
}
return View();
}
EDITは:exeptionイムが取得 は次のとおりです。System.Data.Entity.Validation.DbEntityValidationException:検証は、1つのまたは複数のエンティティ
** **例外は何ですか?あなたの質問を編集して関連情報を含めてください。 –
データモデルに 'ComfirmPassword'プロパティがありません。そのプロパティはビューモデルのみになります –
問題がどこにあるのか推測しないで、例外を読んでください。また、[HMAC自体は安全なパスワードハッシュ関数ではありません](https://security.stackexchange.com/questions/29951/salted-hashes-vs-hmac)。また、ハッシュされたパスワードを比較する必要はなく、単純に平文のパスワードを比較することもできます。認証ホイールを再作成せず、十分にテストされた安全なライブラリを使用してください。 – CodeCaster