開發環境: 微軟的Visual Studio 2010旗艦版, C#, MySql的調用的MySQL函數在C#中驗證用戶名和密碼
嗨,我已經在MySQL中建立一個函數,它接受3個參數,以驗證用戶名和密碼。
DELIMITER $$
USE `generalledger`$$
DROP FUNCTION IF EXISTS `fLogin_Check`$$
CREATE DEFINER=`root`@`localhost`
FUNCTION `fLogin_Check`
(mUserName VARCHAR(50),mUserPass VARCHAR(40),mUserKey VARCHAR(40)) RETURNS INT
BEGIN
DECLARE mCount INT;
SELECT COUNT(*) INTO mCount FROM userMaster
WHERE userName = mUserName
AND AES_DECRYPT(userPass, mUserKey) = UPPER(mUserPass);
IF mCount > 0 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END$$
DELIMITER ;
正如你看到的,我使用的是MySQL的AES_DECRYPT函數來檢查密碼,因爲我已經使用AES_ENCRYPT密碼時插入用戶名和密碼的MySQL表。
現在我需要調用的函數fLogin_Check在C#中,其中我用下面的類方法做:
public int CheckUser(string mUserName, string mPass, string mKey)
{
oCn = da.GetConnection();
int res;
if (oCn == null)
{
oCn.Open();
}
sInsProcName = "fLogin_Check";
insertcommand = new MySqlCommand(sInsProcName, oCn);
insertcommand.CommandType = CommandType.StoredProcedure;
insertcommand.Parameters.Add(new MySqlParameter("mRes", MySqlDbType.Int32, 0));
insertcommand.Parameters["mRes"].Direction = ParameterDirection.ReturnValue;
insertcommand.Parameters.Add("mUserName", MySqlDbType.VarChar, 50, mUserName);
insertcommand.Parameters.Add("mUserPass", MySqlDbType.VarChar, 40, mPass);
insertcommand.Parameters.Add("mUserKey", MySqlDbType.VarChar, 40);
insertcommand.Parameters["mUserKey"].Value = mKey;
res = insertcommand.ExecuteNonQuery();
//res = int.Parse(insertcommand.Parameters["mRes"].Value.ToString());
return (res);
oCn.Close();
}
OCN是用來調用getConnection方法在我的DAL類和DA定義連接赤貧是從DAL類創建的對象,用於打開和關閉數據庫連接。
使用以下全局類我保存用戶後用戶名和密碼進入它們,然後嘗試用fLogic_Check Mysql的功能驗證:
public static class Globals
{
public static string userName;
public static string userPass;
public const string sKey = "AHMEDFINANCEICMAP1122";
}
SKEY是我使用時插入用戶名密碼加密密鑰。現在我想,當用戶輸入用戶名和密碼,然後點擊與下面的代碼登錄按鈕,使用它在C#中的登錄表單:
private void btnCheck_Click(object sender, EventArgs e)
{
Globals.userName = txtUser.Text.ToString();
Globals.userPass = txtPass.Text.ToString();
if (fUser.CheckUser(Globals.userName, Globals.userPass, Globals.sKey) == 0)
{
MessageBox.Show("Invalid Username or Password.");
}
else
{
MessageBox.Show("Login Successfull");
}
}
,它總是返回0,意味着登錄失敗。我檢查了的MySQL GUI Mysql的功能,並能正常工作:
SELECT fLogin_Check("AHMED","AHMED1981","AHMEDFINANCEICMAP1122") FROM userMaster
成功地返回1,但在C#中調用時失敗。我也嘗試訪問參數,我失敗後發表評論......我做錯了什麼?
艾哈邁德
感謝您的答案......我因此就改變了我的代碼的ExecuteScalar擔心,現在正在!!! ...我將做主題鹽醃和散列的研究後會改變我的代碼瞭解它...如果你可以分享任何示例/示例鏈接,這將有所幫助。由於 – Ahmed
有一個美麗的文章在這裏https://crackstation.net/hashing-security.htm這裏HTTP:// WWW。codeproject.com/Articles/425150/Beginners-guide-to-a-secure-way-of-storing-passwor – JohnKiller
非常感謝......我現在忙於自己研究它......並嘗試實施它 – Ahmed