Java程序员的视点了解加密的那些事

来源:老码孙 2020年09月14日 18:19

前语

在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比方在一些接口调用的进程中,我们(Client)不仅仅需求传递给接口效劳(Server)必要的事务参数,还得供给Signature(数字签名)以供Server端进行校验(是否是不合法恳求?是否有篡改?);Server端进行处理后回来给Client的呼应成果中还会包括Signature,以供校验。本篇博客将从Java程序员的视点动身,浅显了解加密、解密的那些事!了解一些术语:单向、对称、非对称假定场景:client需求发送一段音讯"hello world"给server

单向加密

所谓单向加密是指client将音讯"hello world"加密的进程不需求server参加,即加密不依靠server;一同,server将遭到的音讯解密成"hello world"的进程也不依靠client。

例如,我们知道的MD5就是一种单向加密算法,是一种不行逆的算法。

对称加密client加密音讯需求依靠server,两边能够彼此解密。

非对称加密client加密音讯需求依靠server,可是两边不能彼此解密。不行不知的Base64编码

先看一段代码:

BASE64编码/解码测验

需求留意的是,BASE64Encoder和BASE64Decoder并不是官方JDK完成类,假如需求运用,需求引进sun.misc包。

严格来说,BASE64并不是一种加密算法,而是一种编码格局。说白了,BASE64的作用是,将人肉眼能够辨认的信息,转换为不能够辨认的数据,并不是对数据进行加密,仅仅给数据换了一身衣服罢了。(骗的了你的眼睛,骗不了程序)

原数据越大,那么BASE64生成的成果就越大,这是需求额定留意的点。

BASE64的生成成果一直由64个字符来组成。

因为BASE64的编码特性,在一些场景中有运用,比方有些网站会把图片的二进制流编码成BASE64传递给客户端;比方有些邮件效劳器会将邮件的附件直接编码成BASE64连同邮件内容一同发送;比方在URL中有中文需求传递,能够先将中文进行BASE64编码,来避免传输进程中的乱码。运用广泛的MD5MD5,即Message Digest,信息摘要算法第5版。比方在和微信付出、付出宝付出接口交互的进程中,你就能够挑选MD5算法来加密。

先来看一段代码:

MD5

MD5破解?

如前文所说,MD5是一种不行逆的算法,可是为什么存在破解呢?其实,所谓的破解,并不是真实的破解,只不过是大数据查询的一个磕碰罢了。比方,有一台效劳器存储了很多key以及key的MD5编码的信息,那么就能够拿着数据去进行比对。

那么实践场景中,一般我们怎么避免这种暴力破解呢?

答案:进行二次加密。

比方client在调用server接口的时分,server分配给client一个Token,每次client调用server接口的时分,需求对Token以及事务参数一同进行MD5加密。其实这就是所谓的一个“加盐”的进程。

MD5的一些特性剖析

榜首,我们知道BASE64跟着原数据的增大而导致编码后的成果长度变大,而MD5成果的长度值是固定的,就是32位。也就是MD5的压缩性很好。

第二,从原数据核算出MD5是一个快速且简单的进程,不行逆。

第三,要找到2个不同的数据,它们核算后的MD5共同,这是十分困难的。这是MD5的弱磕碰性,也便是说想要假造数据太困难了。

第四,对原数据的任何修正,哪怕只改动一个字节数据,也会导致MD5值发作很大改变,阐明MD5的抗修正性十分好,十分合适暗码、事务数据校验、文件比对等。了解SHASHA,即Security Hash Algorithm,安全散列算法,比方,我们的程序开发结束,我们发布的时分,想指定的人才能够运用,该怎么办呢?这个时分就能够考虑运用SHA算法。SHA是公认的比MD5愈加安全的加密算法,在数字签名范畴运用广泛。

好了,到这儿,开始介绍了下和我们JAVA程序员有关的一些加密的常识,要点介绍了BASE64和MD5,加密算法的水太深了,欢迎我们拍砖指导,^_^

相关推荐
最新文章