0

我正在尝试使用 Razor 对名为 users (containinig an id(int) username(nchar(10)) and的表进行非常简单的用户名和密码验证,password(char(32)但我遇到了这个错误:

Operator '==' cannot be applied to operands of type 'WebMatrix.Data.DynamicRecord' and 'HasherMD5Main'

HasherMD5Main我创建了一个.cs类,它执行 md5 哈希(在数据库中。

代码

@{// Initialize page
    var enteredusername = "";
    var enteredpassword = "";
    var ErrorMessage = "";

    // If this is a POST request, validate and process data
    if( IsPost ) {
        enteredusername = Request.Form["enteredusername"];
        enteredpassword = Request.Form["enteredpassword"];
        var hash = new HasherMD5Main( enteredpassword );
        if( enteredusername.IsEmpty() || enteredpassword.IsEmpty() ) {
            ErrorMessage = "You must specify a username and password.";
        }
        else {
            var db = Database.Open( "MyConnectionString" );
            var passwordquery = db.QuerySingle( "SELECT password FROM users WHERE username = @0", enteredusername );
            if( passwordquery == hash ) {
                Response.Redirect( "/Success" );
            }
            else {
                Response.Redirect( "/Failure" );
            }

        }
    }
}

@if( ErrorMessage != "" ) {
    <p>@ErrorMessage</p>
    <p>Please correct the errors and try again.</p>
}

<form method="post" action="">
    <fieldset>
        <legend>Log In to Your Account</legend>
        <ol>
            <li>
                <label>Username:</label>
                <input type="text" id="enteredusername" name="enteredusername" />
            </li>
            <li>
                <label>Password:</label>
                <input type="password" id="enteredpassword" name="enteredpassword" />
            </li>
            <li>
                <p>
                    <input type="submit" value="login" /></p>
            </li>
        </ol>
    </fieldset>
</form>

关于如何简单地验证我的应用程序提供的散列密码是否与存储在数据库中的散列匹配的任何想法?

4

2 回答 2

0

产生错误的行是:

如果(密码查询 == 哈希)

hash 是您的自定义 Md5 哈希器实例

var hash = new HasherMD5Main(输入密码);

而 passwordquery 是来自数据库查询WebMatrix.Data.DynamicRecord的结果集

var passwordquery = db.QuerySingle("SELECT password FROM users WHERE username = @0", enteredusername );

您要做的是让您的 MD5 哈希计算哈希,然后将其与您可以从结果集中提取的结果值进行比较。

于 2012-12-03T07:22:12.547 回答
0

if(passwordquery == hash) 是发生错误的地方。

当您比较某些东西时,两者都应该在比较之前最终归结为相同的类型。

问候, Pavan.G

于 2012-12-03T09:05:55.487 回答