我有一个存储用户登录名和密码的表。对于测试,密码以极端加密保存。
仅举例:密码“one”被加密为
"[2hVFb>-@#+L4l!_N[1\\i=::3#n.-R$19Z[DgOKKk/X;81=h+Bor%3s:VS)q0-B]QX+%AQ6o` Vom##z=[\\od#ma*PT5\\)wU]{)J:I1JuZm$&?RQrrL{TSon`\"dGN\"fG[`%oSuohY4FVqPcmw%6EOU9bn\\B-4j]>4aTh /LV,;{Sm9`M%/x4.?y+2K4?-$-g0$^9AUqh.3UBZfdv0hF:zya|L&-\\wZh`\\Y=T2o8KHv0o>I0?+/xtdiCLWp,Y$= a>&rkj)n(+_-'AI->;|`4jfZq$\\;%|=/{C$lFvI0c%1yl>To&lWe8vBd%t+7%2QgU#s@O$Vh#l[JpO@ /sJNBT\"hFf;,y\"NLstOLz_Q/{BMPq9UTfC^YH6(o*Z'(v83ncoUr{$23ZlJN*KMn2W+'$BX;koh?fG[G3KhA+f/qJa{#PsbrxmOT_E=O4`[.u \\t哟 zEkAH^`/iLApkzI!az^$MEW:-ihI>^v&onM?bWvNR%'|W[|K(KVUyL`KcQwA064pLwOjIPK:S[O1o>k'-x_QQE|B[vo1pL,%6v>Eb,Gf| *zxm?DVbkl;:Iii?4vo:KDPV@P7sPqy6xz>2>UUh,\\8{bDe05tW)\\ayH/:Ft/aA&k|]1x\"6j#NzHk_peGEXpwh6Y/93TCW9*'']U,/TmhQpr >+aBnhNHkH,LUi@Pn\"?rC;SO$aQumF;'7kENi$UaM\\EYUa:](E6'W*`bYMFFM{(3$a0oIGt((v|'!/"
这就是我验证登录的方式:
internal static bool LoginValidation(string login, string password)
{
using (MySqlCommand sql = new MySqlCommand(" select count(*) from user where login = @login and password = @password ", myConnection))
{
sql.Parameters.AddWithValue("@login", login);
sql.Parameters.AddWithValue("@password", password);
sql.Connection.Open();
return Convert.ToInt32(sql.ExecuteScalar()) > 0 ? true : false;
}
}
其中 password 是一个字符串,其中包含用户密码的加密版本。上面的代码导致“密码附近的 sintax 不正确”。当然,“密码”参数没有按预期进行解析。当我使用 MS SQL Server 时,上面的命令可以正常工作。
我需要做什么才能安全地执行这个查询?
我也试过换行
sql.Parameters.AddWithValue("@password", password);
至
sql.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
但没有区别,导致不正确的语法异常。