我想在用户录入密码存如数据库进行加密,数据库显示的是我加密后的密码,输出时我再进行解密
这个功能怎么实现,给个列子 要代码 md5好像只可以加密不能解密,我修改密码就不能实现
这个功能怎么实现,给个列子 要代码 md5好像只可以加密不能解密,我修改密码就不能实现
解决方案 »
- ASP.NET初学者困惑
- 在做网站编程时经常遇到:未将对象引用设置到对象的实例。
- 这样的输入框怎么做,在线等待!
- 轻声问一下VS2005 下网站下移去引用怎么弄?
- 有parameters的sqlcommand出錯追蹤問題
- 打开别人的asp.net工程需要注意哪些问题啊?
- (C#ASP.NET)请问html服务器控件和web服务器控件有何区别?
- 实时消息提醒,类似于QQ的及时消息提醒
- resultString = messageLength.ToString() + "\x00d"
- 高分请教:为什么在ASP.NET中上传文件时,文件大小大于2M左右,就报该页无法显示??(急!!!)
- 请问兄弟们protected global_asax ApplicationInstance 出现错误,如何解决
- 【一个简单的JavaScript 延迟加载图片】
sqldatareader dr=cmd.ExecuteReader();
if(dr.Read())
{}
其他des,sha等加密解密,搜索很多
public static string GetMD5Hash(String input)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] res = md5.ComputeHash(Encoding.Default.GetBytes(input), 0, input.Length);
char[] temp = new char[res.Length];
System.Array.Copy(res, temp, res.Length);
return new String(temp);
}
FormsAuthentication.HashPasswordForStoringInConfigFile(PWD, "MD5");
是的。另外我可以补充一下,其实很多有着几十年历史的世界流行的系统也不是所谓的加密解密来处理用户密码的。比如使用DES加密解密算法,系统是程序是使用用户输入的密码作为密钥来加密一段固定的文字,然后把加密的结果保存到数据库中。然后当用户登录时,同样地加密一次,然后把密文跟数据库中保存的密文来比较。对于MD5等散列算法,它没有什么密文可言,它得到的是一个固定长度(比如32个字节)的散列值。
{
set { _password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(value, "md5");}
get{return _password;}
}至于判断是否登陆,就匹配加密后的字符串不就行了?
你可以考虑用DES或RSA,c#已经做好支持了,使用就可以,des更好一些
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中 byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
MemoryStream ms = new MemoryStream(); //使得输入密码必须输入英文文本
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
} public static string Decrypt(string pToDecrypt, string sKey)//-------------------------------------------------解密对象
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
} des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 return System.Text.Encoding.Default.GetString(ms.ToArray());
}调用如下感谢您使用 " 请点击以下确认连接,以完成身份验证:<br>"
+ " tiaozhuan.aspx?spring="+DataHelp.Encrypt(name,"alsges12")+"&summer="+DataHelp.Encrypt(email,"alsges12") +
"<br> 5分钟之内注册有效 (如果不能点击该链接地址,请复制并粘贴到浏览器的地址输入框)";这个是加密,相信解密你也应该懂了
{
string str = DataHelp.Encrypt(TextBox1.Text, "alsges12");
Response.Write(str);
}
protected void Button2_Click(object sender, EventArgs e)//解密 文字(上述文本框加密好的内容) 密钥 必须相同 都是 "alsges12"
{
string dec = DataHelp.Decrypt(TextBox1.Text, "alsges12");
Response.Write(dec);
}