Java MD5加密,解密,验签

为什么MD5不能解密?

MD5 是不可逆的
也就是没有对应的算法,能从生产的md5值逆向得到原始数据。
md5作为数据库中的主键可行吗?这就涉及到一个问题,md5值是唯一的吗?答案是,不唯一。
也就是一个原始数据,只对应一个md5值;但是一个md5值,可能对应多个原始数据。
MD5加密原理是散列算法,散列算法也称哈希算法。
计算机专业学的数据结构就有哈希表这一知识点。
比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了。
所以md5不能解密。

验证及破解方法
因为MD5不可逆 所以验证登录密码是否正确这一操作一般都是通过 再次加密 加密完比对两次加密的结果,看结果是否一致 来证实是否正确!

Java中常用的Md5+Key的方式对Url签名防篡改的方法:
最近系统接入支付宝,在demo中看到了如何对get请求的url签名防止篡改的方法,觉得不错特此记录一下。
实现方式是:Md5(url+key) 的方式进行的。
1、key可以是任意的字符串,然后“客户端”,“服务器端”各自保留一份,千万不能外泄。
2、请求的URL例如:  name=jack&age=18
3、 URL+Key字符串拼接后的值用MD5加密生成签名,将签名发送到服务器端,同时服务器端已同样的方式计算出签名,然后比较俩个MD5的值是否相同,来确定URL是否被篡改。
4、别人拿不到key是无法正确计算出签名的。

下面例子包含 htmlunit 模拟表达提交 访问 http://www.cmd5.com/  获得解密的结果

猜你喜欢

转载自blog.csdn.net/hc13097240190/article/details/80716282
今日推荐