我有一个存储用户登录名和密码的表。对于测试,密码以极端加密方式保存。
仅举例:密码“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\\tYo 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不正确”。当然,“password”参数未按预期进行解析。当我使用MS SQL Server时,上面的命令没有错误。
安全执行此查询需要做些什么?
我也试过更改行
sql.Parameters.AddWithValue("@password", password);
到
sql.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
但没有区别,导致语法异常不正确。