繁体   English   中英

如何使用使用 hash 加密、C#、ASP.NET MVC、实体框架的存储过程验证帐户

[英]How can I validate an account with a stored procedure that uses hash encryption, C#, ASP.NET MVC, Entity Framework

所以基本上我有一个存储过程,如果用户存在,它能够解密密码并返回 1。 这是代码:

CREATE PROCEDURE [dbo].[ValidateAccount]    
     @Username VARCHAR(50),
     @AccountPwd VARCHAR(100)   
AS 
BEGIN      
    SET NOCOUNT ON;

    DECLARE @Salt CHAR(25);   
    DECLARE @PwdWithSalt VARCHAR(125);  
    DECLARE @PwdHash VARBINARY(20);  

    SELECT @Salt = Salt, @PwdHash = [Pass]   
    FROM dbo.Users 
    WHERE Username = @Username;

    SET @PwdWithSalt = @Salt + @AccountPwd;

    IF (HASHBYTES('SHA1', @PwdWithSalt) = @PwdHash)
        RETURN 1;   
    ELSE
        RETURN 0;
END;

并且还有一个登录:

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    <div class="form-group">
    <i class="fa fa-user"></i>
    <!-- I'm using htmlAtributes to add CSS class styles and HTML atributes on Editor controls-->
    @Html.EditorFor(model => model.Username , new { htmlAttributes = new { @class = "form-control", @required = "true", @placeholder = "Username" } })
    </div>
    <div class="form-group">
        <i class="fa fa-lock"></i>                   
        @Html.TextBoxFor(model => model.Pass , new { data_bind = "value: Password", @class = "form-control", @required = "true", @placeholder = "Password", @type = "password" })
    </div>
    <div class="form-group">
        <input type="submit" class="btn btn-primary btn-block btn-lg" value="Login">
    </div>
    }

我有一个 model:

public partial class Users
{
        public string Username { get; set; }
        public byte[] Pass { get; set; }

        public string Name { get; set; }
        public string Salt { get; set; }
        public int ID { get; set; }
}

如您所见,数据库中的“通过”列是Byte[] ,因此我在执行该过程并验证用户是否存在并对仪表板采取 go 之类的操作时遇到问题。

有什么想法吗?,我无法找到一个实用的解决方案

这是我应该进行验证的主页 controller:

[HttpPost]
public ActionResult Index(Warehouse_APP.Models.Users userMod)
{
    return View();
}

实际上,您得到的是一个存储过程,它使用与输入原始密码时相同的盐对用户输入的密码进行哈希处理。 如果这 2 个匹配,那么你得到一个 1 否则一个 0 作为返回值。

因此,在 MVC controller 的 HTTP_POST 方法中,您只需使用绑定 model 中的用户名和密码调用该存储过程,并根据结果重定向到相应的成功/错误页面。

您可能会使用实体框架,所以这里是如何执行 SQL: https://www.learnentityframeworkcore.com/raw-sql

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM