<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
写在前面的话
commons-codec 的情况与 commons-io 的情况类似,一提到 java 领域的编解码库,第一选择就是它,几乎想不到它有什么竞品与之竞争,连 guava 这种 all-in-one 式的工具库都索性放弃了这部分功能。
基本概念
最常用工具类是 DigestUtils 类:org.apache.commons.codec.digest.DigestUtils 类
方法 | 说明 |
---|---|
md5Hex | MD5 加密,返回 32 位 |
sha1Hex | SHA-1 加密 |
sha256Hex | SHA-256 加密 |
sha512Hex | SHA-512 加密 |
md5 | MD5 加密,返回 16 位 |
加密算法
MD5 是哈希散列算法<small>(也称摘要算法)</small>,对于 MD5 而言,有两个特性是很重要的,
-
明文数据经过散列以后的值是定长的;
-
是任意一段明文数据,经过散列以后,其结果必须永远是不变的。
MD5 曾一度被认为是非常安全的。但是 MD5 也不会完全不重复,从概率来说 16 的 32 次方遍历后至少出现两个相同的 MD5 值。
表面上看这个概率异常的小,但是山东大学王小云教授发现了 MD5 算法的缺陷,可以很快的找到 MD5 的“磕碰”,能让两个文件可以产生相同的“指纹”,让“碰撞”这种小概率事件变成必然事件。
以 Google 公司为例,Google 公司明确指出不建议再使用 MD5 算法,而使用 SHA256 算法替代。
SHA-256 算法单向 Hash 函数是密码学和信息安全领域中的一个非常重要的基本算法,它是把任意长的消息转化为较短的、固定长度的消息摘要的算法。
SHA-256 算法是 SHA 算法族中的一员,由美国国家安全局<small>(NSA)</small>所设计,并由美国国家标准与技术研究院<small>(NIST)</small>发布;是美国的政府标准。
它的前辈还有 SHA-1。随着密码学<small>(破解)</small>的发展,美国政府计划从 2010 年起不再使用 SHA-1,全面推广使用 SHA-256 和 SHA-512 等加密算法。
对于任意长度的消息,SHA256 都会产生一个 256bit 长的哈希值,称作消息摘要。
这个摘要相当于是个长度为 32 个字节的数组,通常用一个长度为 64 的十六进制字符串来表示。
sha512Hex 方法
以 SHA512 加密算法对数据源进行加密,返回加密后的十六进制形式字符串
String sha512Hex(byte[] data)
String sha512Hex(InputStream data)
String sha512Hex(String data)
sha256Hex 方法
以 SHA256 加密算法对数据源进行加密,返回加密后的十六进制形式字符串
String sha256Hex(byte[] data)
String sha256Hex(InputStream data)
String sha256Hex(String data)
sha1Hex 方法
以 SHA1 加密算法对数据源进行加密,返回加密后的十六进制形式字符串
String sha1Hex(byte[] data)
String sha1Hex(InputStream data)
String sha1Hex(String data)
shaHex 方法
以 SHA1 加密算法对数据源进行加密,返回加密后的十六进制形式字符串
从 1.11 开始被标记为废弃,建议使用 sha1Hex 方法替代。
String shaHex(byte[] data)
String shaHex(InputStream data)
String shaHex(String data)
md5Hex 方法
以 MD5
加密算法对数据源进行加密,返回加密后的十六进制形式字符串
String md5Hex(byte[] data)
String md5Hex(InputStream data)
String md5Hex(String data)
其它
// 同上,只不过返回的不是十六进制字符串,而是加密后的二进制的字节数据
md5()
sha()
sha1()
sha256()
sha512()
网友评论