|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.ComponentModel;
|
|
|
using System.Data;
|
|
|
using System.Drawing;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Windows.Forms;
|
|
|
using System.Data.SqlClient;
|
|
|
using System.Security.Cryptography;
|
|
|
using System.IO;
|
|
|
|
|
|
namespace ClientTest
|
|
|
{
|
|
|
/*
|
|
|
*类名称:LoginForm
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*功能描述:用户登录窗口类
|
|
|
*/
|
|
|
|
|
|
public partial class LoginForm : Form
|
|
|
{
|
|
|
private byte[] key = { (byte)'I', (byte)'M', (byte)'m', (byte)'e', (byte)'s', (byte)'n', (byte)'a', (byte)'c' };
|
|
|
|
|
|
public LoginForm()
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
}
|
|
|
/*
|
|
|
*方法名称:btnOK_Click
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*参数描述:object sender 事件发起者, EventArgs e 事件参数
|
|
|
*返回描述:void
|
|
|
*功能描述:执行登录
|
|
|
*/
|
|
|
|
|
|
private void btnOK_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
if (Common.frmMain == null)
|
|
|
{
|
|
|
Common.frmMain = new FrmMain();
|
|
|
}
|
|
|
|
|
|
//check passed
|
|
|
if (CheckPasswd(tbUserName.Text, tbPassword.Text) == true)
|
|
|
{
|
|
|
this.Hide();
|
|
|
Common.frmMain.ShowDialog();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MessageBox.Show("用户名或密码错误,登录失败!", "请注意", MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
|
|
}
|
|
|
this.Close();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 公司通用加解密算法
|
|
|
/// 孙宜建
|
|
|
/// </summary>
|
|
|
/// <param name="src">加解密字符串</param>
|
|
|
/// <param name="key">密钥</param>
|
|
|
/// <param name="Encrypt">bool类型,1为加密,否则为解密</param>
|
|
|
/// <returns></returns>
|
|
|
public static string EncryptionEngine(string src, string key, Boolean Encrypt)
|
|
|
{
|
|
|
int KeyLen;
|
|
|
int KeyPos;
|
|
|
int offset;
|
|
|
string dest;
|
|
|
int SrcPos;
|
|
|
int SrcAsc;
|
|
|
int TmpSrcAsc;
|
|
|
int Range;
|
|
|
|
|
|
KeyLen = key.Length;
|
|
|
if (KeyLen == 0)
|
|
|
{
|
|
|
key = "Mesnac";
|
|
|
}
|
|
|
KeyPos = 0;
|
|
|
SrcPos = 0;
|
|
|
SrcAsc = 0;
|
|
|
Range = 256;
|
|
|
if (Encrypt) //加密
|
|
|
{
|
|
|
//System.Random r = new Random(Range);
|
|
|
//offset = r.Next(Range);
|
|
|
System.Random r = new Random();
|
|
|
offset = r.Next() % 256 + 1;
|
|
|
dest = string.Format("{0:X}", offset);
|
|
|
if (dest.Length == 1)
|
|
|
{
|
|
|
dest = "0" + dest;
|
|
|
}
|
|
|
for (SrcPos = 0; SrcPos < src.Length; SrcPos++)
|
|
|
{
|
|
|
SrcAsc = ((int)src[SrcPos] + offset) % 255;
|
|
|
if (KeyPos < KeyLen)
|
|
|
{
|
|
|
KeyPos = KeyPos + 1;
|
|
|
}
|
|
|
else { KeyPos = 0; }
|
|
|
|
|
|
SrcAsc = SrcAsc ^ (int)key[KeyPos]; //异或
|
|
|
|
|
|
string tempSrcAsc = string.Format("{0:X}", SrcAsc);
|
|
|
if (tempSrcAsc.Length == 1)
|
|
|
{
|
|
|
tempSrcAsc = "0" + tempSrcAsc;
|
|
|
}
|
|
|
dest = dest + tempSrcAsc;
|
|
|
offset = SrcAsc;
|
|
|
}
|
|
|
|
|
|
return dest;
|
|
|
|
|
|
}
|
|
|
else //解密
|
|
|
{
|
|
|
if (src.Length <= 2)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
dest = "";
|
|
|
//offset = (int)("0x" + src.Substring(1, 2));
|
|
|
offset = Convert.ToInt32(src.Substring(0, 2), 16);
|
|
|
SrcPos = 2;
|
|
|
while (SrcPos < src.Length)
|
|
|
{
|
|
|
SrcAsc = Convert.ToInt32(src.Substring(SrcPos, 2), 16);
|
|
|
if (KeyPos < KeyLen)
|
|
|
{
|
|
|
KeyPos = KeyPos + 1;
|
|
|
}
|
|
|
else { KeyPos = 0; }
|
|
|
|
|
|
TmpSrcAsc = SrcAsc ^ (int)key[KeyPos]; //异或
|
|
|
if (TmpSrcAsc <= offset)
|
|
|
{
|
|
|
TmpSrcAsc = 255 + TmpSrcAsc - offset;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
TmpSrcAsc = TmpSrcAsc - offset;
|
|
|
}
|
|
|
dest = dest + (char)TmpSrcAsc;
|
|
|
offset = SrcAsc;
|
|
|
SrcPos = SrcPos + 2;
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return dest;
|
|
|
}
|
|
|
/*
|
|
|
*方法名称:Encrypt
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*参数描述:String pwd 待加密的口令串
|
|
|
*返回描述:String 加密后的口令串
|
|
|
*功能描述:对口令进行加密
|
|
|
*/
|
|
|
private String Encrypt(String pwd)
|
|
|
{
|
|
|
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();//des进行加密
|
|
|
//PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//产生key
|
|
|
MemoryStream ms = new MemoryStream();//存储加密后的数据
|
|
|
CryptoStream cs = new CryptoStream(ms, desc.CreateEncryptor(key, key), CryptoStreamMode.Write);
|
|
|
byte[] data = Encoding.Unicode.GetBytes(pwd);//取到密码的字节流
|
|
|
cs.Write(data, 0, data.Length);//进行加密
|
|
|
cs.FlushFinalBlock();
|
|
|
byte[] res = ms.ToArray();//取加密后的数据
|
|
|
return Encoding.Unicode.GetString(res);//转换到字符串返回
|
|
|
}
|
|
|
/*
|
|
|
*方法名称:Decrypt
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*参数描述:String data 被加密的口令串
|
|
|
*返回描述:String 解密后的口令串
|
|
|
*功能描述:对口令进行解密
|
|
|
*/
|
|
|
private String Decrypt(String data)
|
|
|
{
|
|
|
DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
|
|
|
//PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//产生key
|
|
|
MemoryStream ms = new MemoryStream();//存储解密后的数据
|
|
|
CryptoStream cs = new CryptoStream(ms, desc.CreateDecryptor(key, key), CryptoStreamMode.Write);
|
|
|
byte[] databytes = Encoding.Unicode.GetBytes(data);//取到加密后的数据的字节流
|
|
|
cs.Write(databytes, 0, databytes.Length);//解密数据
|
|
|
cs.FlushFinalBlock();
|
|
|
byte[] res = ms.ToArray();
|
|
|
return Encoding.Unicode.GetString(res);//返回解密后的数据
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
*方法名称:CheckPasswd
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*参数描述:string sUserName 用户名, string sPasswd 加密后的口令串
|
|
|
*返回描述:bool 密码核对,true 成功,false 失败
|
|
|
*功能描述:对用户名,口令进行核对
|
|
|
*/
|
|
|
private bool CheckPasswd(string sUserName, string sPasswd)
|
|
|
{
|
|
|
bool res = false;
|
|
|
//算查询参数
|
|
|
string sEncryptPasswd = EncryptPassword(sPasswd, "MD5");
|
|
|
//数据库查询
|
|
|
string querySQLString = string.Format("select 1 from [dbo].[T_Sys_UserInfo] where [UseName]='{0}' and [UserPwd]='{1}'", sUserName, sEncryptPasswd);//???????????????????sUserName sEncryptPasswd
|
|
|
string connectMaskString = "database={0};Integrated Security=False;user id=sa;password={1};server={2};Connection Timeout=90";
|
|
|
|
|
|
int nLen = Common.configReader.sPWD.Length;
|
|
|
|
|
|
if (nLen % 2 != 0)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
byte[] btPWD = new byte[nLen / 2];
|
|
|
|
|
|
for (int i = 0; i < nLen / 2; i++)
|
|
|
{
|
|
|
btPWD[i] = Convert.ToByte(Common.configReader.sPWD.Substring(i * 2, 2), 16);
|
|
|
}
|
|
|
|
|
|
string sPWDForDB = System.Text.Encoding.Unicode.GetString(btPWD);
|
|
|
string sPlainPWDForDB = EncryptionEngine(Common.configReader.sPWD, String.Empty, false); //Decrypt(sPWDForDB);
|
|
|
|
|
|
string connectString = string.Format(connectMaskString, Common.configReader.sDatabase, sPlainPWDForDB, Common.configReader.sServer);
|
|
|
using (SqlConnection connection = new SqlConnection(connectString))
|
|
|
{
|
|
|
SqlCommand command = new SqlCommand(querySQLString, connection);
|
|
|
try
|
|
|
{
|
|
|
connection.Open();
|
|
|
SqlDataReader reader = command.ExecuteReader();
|
|
|
if (reader.HasRows)
|
|
|
{
|
|
|
res = true;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception e1)
|
|
|
{
|
|
|
//MessageBox.Show(e1.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
*方法名称:EncryptPassword
|
|
|
*创建人:李然
|
|
|
*创建时间:
|
|
|
*参数描述:string PasswordString 待加密的字符串, string PasswordFormat 加密格式
|
|
|
*返回描述:string 加密后的字符串
|
|
|
*功能描述:加密字符串
|
|
|
*/
|
|
|
public static string EncryptPassword(string PasswordString, string PasswordFormat)
|
|
|
{
|
|
|
string strResult = "";
|
|
|
if (PasswordFormat == "SHA1")
|
|
|
strResult = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString, "SHA1");
|
|
|
if (PasswordFormat == "MD5")
|
|
|
strResult = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString, "MD5");
|
|
|
return strResult;
|
|
|
|
|
|
}
|
|
|
/*
|
|
|
*方法名称:btnCancel_Click
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*参数描述:object sender 事件发起者, EventArgs e 事件参数
|
|
|
*返回描述:void
|
|
|
*功能描述:取消登录,关闭窗口
|
|
|
*/
|
|
|
|
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
|
|
{
|
|
|
this.Close();
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
*方法名称:LoginForm_Shown
|
|
|
*创建人:韩荣伟
|
|
|
*创建时间:2010-10-30
|
|
|
*参数描述:object sender 事件发起者, EventArgs e 事件参数
|
|
|
*返回描述:void
|
|
|
*功能描述:登录窗口显示处理
|
|
|
*/
|
|
|
|
|
|
private void LoginForm_Shown(object sender, EventArgs e)
|
|
|
{
|
|
|
tbUserName.Focus();
|
|
|
}
|
|
|
}
|
|
|
}
|