求加密和解密算法

yujiayou 2010-10-16 02:46:29
我想在用户录入密码存如数据库进行加密,数据库显示的是我加密后的密码,输出时我再进行解密


这个功能怎么实现,给个列子 要代码

md5好像只可以加密不能解密,我修改密码就不能实现
...全文
136 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjin_fenge 2010-10-16
  • 打赏
  • 举报
回复
DataHelp是存放加密函数的类名 - -!
yujiayou 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sp1234 的回复:]
引用 7 楼 lq_651119244 的回复:
引用 5 楼 shenzhiwen 的回复:
MD5不能解密的话,用户怎么登陆啊?

不用解密,把用户输入的再进行加密然后和数据库中进行对比是否相等


是的。

另外我可以补充一下,其实很多有着几十年历史的世界流行的系统也不是所谓的加密解密来处理用户密码的。比如使用DES加密解密算法,系统是程序是使用用户输入的密码作为密钥来加密……
[/Quote]

我要修改密码怎么办那
huangjin_fenge 2010-10-16
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)//加密 文本框内容
{
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);
}
huangjin_fenge 2010-10-16
  • 打赏
  • 举报
回复
在App_Code 里面放入一下代码,然后调用 key 设置成8位,例如 "alsges12" 英文字母和数字结合 单个也可以

public static string Encrypt(string pToEncrypt, string sKey)//-------------------------------------------加密对象
{
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分钟之内注册有效 (如果不能点击该链接地址,请复制并粘贴到浏览器的地址输入框)";这个是加密,相信解密你也应该懂了
qz362100 2010-10-16
  • 打赏
  • 举报
回复
考虑用DES或RSA
最后一只恐龙 2010-10-16
  • 打赏
  • 举报
回复
MD5是数字指纹,一般用于数字签名,不是加密数据的算法。
你可以考虑用DES或RSA,c#已经做好支持了,使用就可以,des更好一些
chen0683102 2010-10-16
  • 打赏
  • 举报
回复
加密解密方法很多,网上搜搜就知道了
bairuo 2010-10-16
  • 打赏
  • 举报
回复
不是有个个类专门用来加密嘛?方法如下:

public string Password
{
set { _password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(value, "md5");}
get{return _password;}
}

至于判断是否登陆,就匹配加密后的字符串不就行了?
吴青峰 2010-10-16
  • 打赏
  • 举报
回复
不能解密谁说不可以登录了,迂腐。

纠正:谁说就给密码不能实现了,密码不显示重来!输入新值,把旧值覆盖不就ok了,灵活啊,钻牛角尖会死很惨啊,兄弟。
  • 打赏
  • 举报
回复
使用数据库保存用户密码,其核心根本不是一个加密解密还是散列的问题,而是:

即使程序开发者自己也不能解密出用户密码来。

如果你参与做一个开源系统,不是这样处理用户密码的数据库保存的,会被人笑话的。
孟子E章 2010-10-16
  • 打赏
  • 举报
回复
http://dotnet.aspx.cc/article/7ae7d20a-a5da-4303-ac2d-32046be4d086/read.aspx
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lq_651119244 的回复:]
引用 5 楼 shenzhiwen 的回复:
MD5不能解密的话,用户怎么登陆啊?

不用解密,把用户输入的再进行加密然后和数据库中进行对比是否相等
[/Quote]

是的。

另外我可以补充一下,其实很多有着几十年历史的世界流行的系统也不是所谓的加密解密来处理用户密码的。比如使用DES加密解密算法,系统是程序是使用用户输入的密码作为密钥来加密一段固定的文字,然后把加密的结果保存到数据库中。然后当用户登录时,同样地加密一次,然后把密文跟数据库中保存的密文来比较。

对于MD5等散列算法,它没有什么密文可言,它得到的是一个固定长度(比如32个字节)的散列值。
村长_乐 2010-10-16
  • 打赏
  • 举报
回复
我们公司就是用md5加密的...
  • 打赏
  • 举报
回复
纯粹是翻译问题,对于中国传统概念上的所谓加密解密,md5、sha之类的就根本不算。

这只能用“混淆”,或者更直接的词“散列”来说明。
LQ_651119244 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shenzhiwen 的回复:]
MD5不能解密的话,用户怎么登陆啊?
[/Quote]
不用解密,把用户输入的再进行加密然后和数据库中进行对比是否相等
java447060786 2010-10-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shenzhiwen 的回复:]
MD5不能解密的话,用户怎么登陆啊?
[/Quote]
加密后进行比较
ErnestChen2go 2010-10-16
  • 打赏
  • 举报
回复
MD5不能解密的话,用户怎么登陆啊?
kkbac 2010-10-16
  • 打赏
  • 举报
回复
不过一般还是md5比较正规.
kkbac 2010-10-16
  • 打赏
  • 举报
回复
可以AES加密和解密.
wuyq11 2010-10-16
  • 打赏
  • 举报
回复
md5加密,登录时加密与数据库中数据比较
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");

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧