• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

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;
}
...全文
420 点赞 收藏 26
写回复
26 条回复
以专业开发人员为伍 2014年01月13日
农村里有些老头老太太就容易被那些“大仙、神算”欺骗。这是因为这些人不会稍微进行“反迷信”的活动。 可能在这里也是如此。如果你被某些人告诉你说他解密了123之类的,那么也是因为如此。
回复 点赞
以专业开发人员为伍 2014年01月13日
引用 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的人所解密。其他方式除了 做成字典的虚拟解密方式之外不太可能出现 正确的方案
回复 点赞
小卜兔 2014年01月13日
引用 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日
这个加密其实原本就有一个解密函数的,而且调用的时候也只要传过去加密后的字符串就可以调用了,只不过原来需求不需要,上线的时候吧冗余代码删了,现在几个月过去了,公司又没有源代码管理工具,所以没办法找回了,
回复 点赞
小卜兔 2014年01月12日
貌似123用MD5加密之后会得到一个不变的结果比如xxx,然后人家把123和xxx对应起来存放。然后你知道加密后的结果之后,比如知道xxx,就可以查找到加密前的123了。。
回复 点赞
以专业开发人员为伍 2014年01月12日
我可以给你说一个可以扩大你的思路的事实。以前,至少很多年吧,反正许多Unix及其后裔的系统的基本密码保存机制,不使用MD5,但是跟MD5保存密码的初衷很类似。比如果用户输入的密码是“asdfafo(∩_∩)o1223”,然后人家系统号称使用DES加密,可是并不是对这个密码加密,而使用这个密码取其部分作为密码循环地对一个已知的固定字符串加密,例如对“一只黄鹂鸣翠柳,两行白鹭上青天”这句诗加密,然后将得到的密文保存到数据库里,作为将来验证的根据。 也就是说,就算人家采取DES来为密码签名,人家也要保证不能轻易解密。 因此说到“解密的误区”我们不得不说,有些人不是犯了低级的技术问题,而是高级的背景知识问题。
回复 点赞
大渣吼吾系渣渣辉 2014年01月12日
加密不可逆的,你可以加密之后加上自定义的一些加密或者干脆自己来定义加密
回复 点赞
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解密网站
回复 点赞
以专业开发人员为伍 2014年01月11日
另外,小学老师不管是否真的被你咒死了,他都不能在你上小学时就告诉你这个。你现在虚心学习也还不完。 也不能随便找一些损友随便议论、嘲讽一下,靠现学现卖地收集点谈资,就当作到各个公司混饭吃技术。 还是要正式地学习知识概念。
回复 点赞
以专业开发人员为伍 2014年01月11日
正是因为知道这个市,才知道有些人所谓的“解密”是多么不靠谱。 她“终于”证明了,原来确实可以用一种方法找到“碰撞”结果啊。例如你拿出一本有着8000字(因为单词)的莎士比亚的小说,于是王小云解释说,她找到了一种方法来用计算机生成一个有着2000万个乱码符号的文本,其md5值跟莎士比亚的这本小说的md5值恰好相等。 但是假设我们假上任意一个“防止胡乱碰撞”的条件呢?例如我们要求找到的东西的单词数量不能大于15000个,或者我们要求找到的内容的第一个词、第3000个词、最后一个词必须与莎士比亚的小说中相应位置的词一样,等等,那么就算1000个王小云也就傻眼了。(更别提那些道听途说的人了) 找到一个方法证明确实有几大可能性能够生成胡乱碰撞,这就是你说的“解析”吗?那么你的解密、解析也没有什么意义了,只是一堆乱码。
回复 点赞
风吹腚腚凉 2014年01月10日
引用 6 楼 caozhy 的回复:
5个角的都不知道md5根本就不是加密算法?
据说山东大学某人解析了这个算法,不知道解析这个词用的对不起,小学老师死得早。 你一个红钻石都不知道这件事?
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告