C#使用伪随机数实现加密用户密码的方法
本文所述实例为使用伪随机数进行用户密码加密,这段代码为核心部分主要代码,需要配合其它的程序实现,感兴趣的读者可以自己进一步加以完善,不费话了,下面列出主要代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespacePRanDataEncrypt
{
publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(textBox3.Text!="")
{
if(DecryptPwd(textBox3.Text)==textBox2.Text)
MessageBox.Show("用户登录成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
else
MessageBox.Show("用户密码错误!","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
privatevoidbutton2_Click(objectsender,EventArgse)
{
textBox1.Text=textBox2.Text=textBox3.Text=string.Empty;
textBox2.Focus();
}
privatevoidtextBox2_TextChanged(objectsender,EventArgse)
{
textBox3.Text=EncryptPwd(textBox2.Text);
}
//定义加密用户密码所用的伪随机数
privatestringrandStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
#region使用伪随机数加密用户登录密码
///<summary>
///使用伪随机数加密用户登录密码
///</summary>
///<paramname="str">用户登录密码</param>
///<returns>加密后的用户登录密码</returns>
privatestringEncryptPwd(stringstr)
{
byte[]btData=Encoding.Default.GetBytes(str);
intj,k,m;
intlen=randStr.Length;
StringBuildersb=newStringBuilder();
Randomrand=newRandom();
for(inti=0;i<btData.Length;i++)
{
j=(byte)rand.Next(6);
btData[i]=(byte)((int)btData[i]^j);
k=(int)btData[i]%len;
m=(int)btData[i]/len;
m=m*8+j;
sb.Append(randStr.Substring(k,1)+randStr.Substring(m,1));
}
returnsb.ToString();
}
#endregion
#region解密用户登录密码
///<summary>
///解密用户登录密码
///</summary>
///<paramname="str">经过加密的用户登录密码</param>
///<returns>解密后的用户登录密码</returns>
privatestringDecryptPwd(stringstr)
{
try
{
intj,k,m,n=0;
intlen=randStr.Length;
byte[]btData=newbyte[str.Length/2];
for(inti=0;i<str.Length;i+=2)
{
k=randStr.IndexOf(str[i]);
m=randStr.IndexOf(str[i+1]);
j=m/8;
m=m-j*8;
btData[n]=(byte)(j*len+k);
btData[n]=(byte)((int)btData[n]^m);
n++;
}
returnEncoding.Default.GetString(btData);
}
catch{return"";}
}
#endregion
}
}