MD5解密

six-years 2014-01-10 04:07:51
加密方法如下 帮忙写一个解密函数

public string EncryptString(string str)
{
ASCIIEncoding ASC = new ASCIIEncoding();
byte[] arrPwd = ASC.GetBytes(str + "jm");
MD5 md5 = new MD5CryptoServiceProvider();
byte[] arrHashPwd = md5.ComputeHash(arrPwd);
//转成字符串,表示十六进制值
string sHashPwd = "";
foreach (byte b in arrHashPwd)
{
if (b < 16)
sHashPwd = sHashPwd + "0" + b.ToString("x");
else
sHashPwd = sHashPwd + b.ToString("x");
}
return sHashPwd;
}
...全文
608 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
农村里有些老头老太太就容易被那些“大仙、神算”欺骗。这是因为这些人不会稍微进行“反迷信”的活动。 可能在这里也是如此。如果你被某些人告诉你说他解密了123之类的,那么也是因为如此。
  • 打赏
  • 举报
回复
引用 17 楼 bill0605030109 的回复:
貌似123用MD5加密之后会得到一个不变的结果比如xxx,然后人家把123和xxx对应起来存放。然后你知道加密后的结果之后,比如知道xxx,就可以查找到加密前的123了。。
真有意思,照你这么说,是不是就算是世界上没有“加密解密技术了”? 实际上这不是解密技术,对吧?! 另外我告诉你,如果一个程序员把123这样处理,就是有可能被炒鱿鱼了。他的产品经理一定会告诉过他,要把(例如)“用户名+用户密码+用户email+用户第一次注册时间+开发商名+软件名称+abcd”加在一起的结果,在加上这个字符串的反转字符串,最后拼在一起的结果,才计算md5。
md5e 2014-01-13
  • 打赏
  • 举报
回复
为嘛总有人去问这么无聊的话题呢? 我们都知道 100+100=200 但我给你200,你怎么知道我用的就是100+100而不是199+1或者是200*1呢? Md5的原理就是这样的,是不可逆的运算,你只知道结果,但不代表你就知道运算公式 给你200你知道别的公式计算出来也得到相同结果,但确不知道原公式是怎么样的就叫碰撞
Jdragon 2014-01-13
  • 打赏
  • 举报
回复
MD5 一般都做解密,都新密码串 在加密对比
_moli 2014-01-13
  • 打赏
  • 举报
回复
mark
M依然 2014-01-13
  • 打赏
  • 举报
回复
不要被所谓的解密md5网站所迷惑你可以试着用一些比较 偏门的词汇来md5 把获取的md5弄到md5所谓的破解网站让他解密下试试。会告诉你服务器查询超时 md5可能被解密。但我相信只可能是被写出md5的人所解密。其他方式除了 做成字典的虚拟解密方式之外不太可能出现 正确的方案
  • 打赏
  • 举报
回复
引用 18 楼 sp1234 的回复:
[quote=引用 17 楼 bill0605030109 的回复:] 貌似123用MD5加密之后会得到一个不变的结果比如xxx,然后人家把123和xxx对应起来存放。然后你知道加密后的结果之后,比如知道xxx,就可以查找到加密前的123了。。
真有意思,照你这么说,是不是就算是世界上没有“加密解密技术了”? 实际上这不是解密技术,对吧?! 另外我告诉你,如果一个程序员把123这样处理,就是有可能被炒鱿鱼了。他的产品经理一定会告诉过他,要把(例如)“用户名+用户密码+用户email+用户第一次注册时间+开发商名+软件名称+abcd”加在一起的结果,在加上这个字符串的反转字符串,最后拼在一起的结果,才计算md5。[/quote] 不错。。
hxhbluestar 2014-01-13
  • 打赏
  • 举报
回复
引用 25 楼 Q1092926267 的回复:
这个加密其实原本就有一个解密函数的,而且调用的时候也只要传过去加密后的字符串就可以调用了,只不过原来需求不需要,上线的时候吧冗余代码删了,现在几个月过去了,公司又没有源代码管理工具,所以没办法找回了,
楼主还是没弄明白啊
six-years 2014-01-13
  • 打赏
  • 举报
回复
这个加密其实原本就有一个解密函数的,而且调用的时候也只要传过去加密后的字符串就可以调用了,只不过原来需求不需要,上线的时候吧冗余代码删了,现在几个月过去了,公司又没有源代码管理工具,所以没办法找回了,
  • 打赏
  • 举报
回复
貌似123用MD5加密之后会得到一个不变的结果比如xxx,然后人家把123和xxx对应起来存放。然后你知道加密后的结果之后,比如知道xxx,就可以查找到加密前的123了。。
  • 打赏
  • 举报
回复
我可以给你说一个可以扩大你的思路的事实。以前,至少很多年吧,反正许多Unix及其后裔的系统的基本密码保存机制,不使用MD5,但是跟MD5保存密码的初衷很类似。比如果用户输入的密码是“asdfafo(∩_∩)o1223”,然后人家系统号称使用DES加密,可是并不是对这个密码加密,而使用这个密码取其部分作为密码循环地对一个已知的固定字符串加密,例如对“一只黄鹂鸣翠柳,两行白鹭上青天”这句诗加密,然后将得到的密文保存到数据库里,作为将来验证的根据。 也就是说,就算人家采取DES来为密码签名,人家也要保证不能轻易解密。 因此说到“解密的误区”我们不得不说,有些人不是犯了低级的技术问题,而是高级的背景知识问题。
  • 打赏
  • 举报
回复
加密不可逆的,你可以加密之后加上自定义的一些加密或者干脆自己来定义加密
junlinfushi 2014-01-12
  • 打赏
  • 举报
回复
之前只知道有MD5,还不知道是干嘛用的
junlinfushi 2014-01-12
  • 打赏
  • 举报
回复
引用 12 楼 hxhbluestar 的回复:
MD5主要用于校验,就是检查两个字节数组经过同一个算法,其结果是否一样;源如果一样,则结果必定一样,但如果任何一个字节不一致,其结果就差得很远。比如下载完文件后的MD5校验,压缩解压的校验,云盘系统检查到有文件需要更新的校验,以及360为什么知道有木马篡改了某一个system32下面的dll,都是这个应用。基础知识建议去看看维基百科 http://zh.wikipedia.org/wiki/MD5 所以,如果你仅仅是为了把这个密码保存到数据库里面,即使能看到数据库的人也不知道原始密码是什么,就只需要MD5“加密”就行了,无需解密,下次用户再输入密码登陆的时候,把它输入的密码重新用MD5算一次,如果和数据库里面保存的那一段密码一致,就说明是正确的。 用在我们网站上的那个密码的MD5,其实已经不是那么安全了,我们虽然无法从MD5之后的结果反推算出密码是123456之类的(计算能力足够的情况下,MD5穷举也不是什么难事),但是因为算法应用广泛,已经有不少黑客手里握着大量的MD5常用密码(比如123456,888888这种)字典,一个一个匹配就知道你的原始密码是什么了。所以现在要用MD5也需要让密码加上一个特殊的字符串再进行MD5算法,或者进行二次三次打乱加密等等来保证去字典化。比如你代码里面
 byte[] arrPwd = ASC.GetBytes(str + "jm");
这里的jm就是你自己加的东西,除了你自己谁也不知道,这个jm就是需要保护的钥匙 如果你真的需要加密解密,则应该去看看DES对称加密算法或者RSA非对称加密算法,这些在.NET平台里面都有现成的实现,比如DES这个:http://xvto.blog.163.com/blog/static/77983414201161064245506/,其他的建议翻看MSDN
+1
hxhbluestar 2014-01-12
  • 打赏
  • 举报
回复
MD5主要用于校验,就是检查两个字节数组经过同一个算法,其结果是否一样;源如果一样,则结果必定一样,但如果任何一个字节不一致,其结果就差得很远。比如下载完文件后的MD5校验,压缩解压的校验,云盘系统检查到有文件需要更新的校验,以及360为什么知道有木马篡改了某一个system32下面的dll,都是这个应用。基础知识建议去看看维基百科 http://zh.wikipedia.org/wiki/MD5 所以,如果你仅仅是为了把这个密码保存到数据库里面,即使能看到数据库的人也不知道原始密码是什么,就只需要MD5“加密”就行了,无需解密,下次用户再输入密码登陆的时候,把它输入的密码重新用MD5算一次,如果和数据库里面保存的那一段密码一致,就说明是正确的。 用在我们网站上的那个密码的MD5,其实已经不是那么安全了,我们虽然无法从MD5之后的结果反推算出密码是123456之类的(计算能力足够的情况下,MD5穷举也不是什么难事),但是因为算法应用广泛,已经有不少黑客手里握着大量的MD5常用密码(比如123456,888888这种)字典,一个一个匹配就知道你的原始密码是什么了。所以现在要用MD5也需要让密码加上一个特殊的字符串再进行MD5算法,或者进行二次三次打乱加密等等来保证去字典化。比如你代码里面
 byte[] arrPwd = ASC.GetBytes(str + "jm");
这里的jm就是你自己加的东西,除了你自己谁也不知道,这个jm就是需要保护的钥匙 如果你真的需要加密解密,则应该去看看DES对称加密算法或者RSA非对称加密算法,这些在.NET平台里面都有现成的实现,比如DES这个:http://xvto.blog.163.com/blog/static/77983414201161064245506/,其他的建议翻看MSDN
CyberLogix 2014-01-11
  • 打赏
  • 举报
回复
MD5是摘要算法,不属于加密算法
Code従業員 2014-01-11
  • 打赏
  • 举报
回复
MD5 的解密应该是靠字典,比如:输入“123”生成密文A,当别人查询密文A的时候,就直接返回“123”了 你可以看看,我是经常用: MD5解密网站
  • 打赏
  • 举报
回复
另外,小学老师不管是否真的被你咒死了,他都不能在你上小学时就告诉你这个。你现在虚心学习也还不完。 也不能随便找一些损友随便议论、嘲讽一下,靠现学现卖地收集点谈资,就当作到各个公司混饭吃技术。 还是要正式地学习知识概念。
  • 打赏
  • 举报
回复
正是因为知道这个市,才知道有些人所谓的“解密”是多么不靠谱。 她“终于”证明了,原来确实可以用一种方法找到“碰撞”结果啊。例如你拿出一本有着8000字(因为单词)的莎士比亚的小说,于是王小云解释说,她找到了一种方法来用计算机生成一个有着2000万个乱码符号的文本,其md5值跟莎士比亚的这本小说的md5值恰好相等。 但是假设我们假上任意一个“防止胡乱碰撞”的条件呢?例如我们要求找到的东西的单词数量不能大于15000个,或者我们要求找到的内容的第一个词、第3000个词、最后一个词必须与莎士比亚的小说中相应位置的词一样,等等,那么就算1000个王小云也就傻眼了。(更别提那些道听途说的人了) 找到一个方法证明确实有几大可能性能够生成胡乱碰撞,这就是你说的“解析”吗?那么你的解密、解析也没有什么意义了,只是一堆乱码。
风吹腚腚凉 2014-01-10
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
5个角的都不知道md5根本就不是加密算法?
据说山东大学某人解析了这个算法,不知道解析这个词用的对不起,小学老师死得早。 你一个红钻石都不知道这件事?
加载更多回复(6)

62,046

社区成员

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

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

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

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