貌似123用MD5加密之后会得到一个不变的结果比如xxx,然后人家把123和xxx对应起来存放。然后你知道加密后的结果之后,比如知道xxx,就可以查找到加密前的123了。。
[quote=引用 17 楼 bill0605030109 的回复:] 貌似123用MD5加密之后会得到一个不变的结果比如xxx,然后人家把123和xxx对应起来存放。然后你知道加密后的结果之后,比如知道xxx,就可以查找到加密前的123了。。
这个加密其实原本就有一个解密函数的,而且调用的时候也只要传过去加密后的字符串就可以调用了,只不过原来需求不需要,上线的时候吧冗余代码删了,现在几个月过去了,公司又没有源代码管理工具,所以没办法找回了,
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
byte[] arrPwd = ASC.GetBytes(str + "jm");
5个角的都不知道md5根本就不是加密算法?
62,243
社区成员
668,998
社区内容
加载中
.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。
希望和大家一起共同营造一个活跃、友好的社区氛围。
试试用AI创作助手写篇文章吧