最近因为要和第三方公司进行业务对接,数据传输需要进行加密。合作公司使用的是RSA加密,我一脸懵逼!
懵逼原因是我太菜了,平常只做crud。也正好借这个机会了解一下加密技术。
这篇文章按照内容的重要性从高到低排序 适合食用>
1、javaweb项目常用的加密算法
首先是算法的分类,主要要有:
- 对称加密算法: DES 、3DES、AES(微信用)、IDEA
- 非对称加密算法:RSA、DSA、ECC
- 不可逆加密算法(摘要):MD5、SHS
上面列举了辣么多,记不住,个人较常用的也就是黑体标出来的
2、简单的使用场景
(1)用户登录,用户名和密码加密 des、md5
- 一般是前端先用MD5加密密码,再用对称加密算法des加密用户名、密码,传入后台。
- 后台用des解密用户名和密码,然后用这个用户名去数据库取密码(存的就是MD5加密过的),
- 再与前端传入的密码进行比较是否一致,如果一致则密码正确。
(由于MD5加密的不可逆性,所以很多网站登录忘记密码的都是直接重置密码,而不是找回密码,我想可能网站本身也不知道你的密码是啥吧)
这个流程也是我看了我们有些项目之后了解的,但是我发现有个项目是用户名和密码都是des加密传输到后台,然后在后台解密密码之后再进行md5加密,再和数据库的密码进行对比,我当时看完就一张黑人问号脸???(这不是自己骗自己么)
(2)正常的数据通讯,比如与第三方公司接口对接、等 rsa
3、几种算法的使用教程
DES使用示例代码 java版
RSA使用示例代码 java版
MD5使用示例代码 java版
4、几种算法的特点比较、如何选择
- 对称加密算法:des ,速度较快,适用用于大量数据的加密场合,3des其实本质也是des,只不过是一块数据用3个不同的密钥进行3次加密,强度更高了。
- 非对称加密算法:RSA,速度较慢,安全性相对较好,一般需要加上SHA256withRSA进行签名
对大量的数据不建议使用,因为性能差 - 不可逆加密算法:MD5,也可以说是一个摘要算法或者哈希算法,它的特点是不可还原,速度一般
如果用MD5加密密码,被截获后,还是可以通过枚举比对的方式,进行破解;另外,因为是哈希算法,存在哈希碰撞的可能,也就是说,两篇不同的报文,进行md5之后可能是一样的,虽然概率比较低
网友评论