Apache Commons Codec 常用工具类库
处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等.
pom
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
Base64 编解码
public class Base64Utils {
/**
* Base64 编解码。
*/
@Test
public void encodeBase64() throws IOException {
//Base64 编码
String encodeBase64 = Base64.encodeBase64String("千里之行始于足下".getBytes(StandardCharsets.UTF_8));
//5Y2D6YeM5LmL6KGM5aeL5LqO6Laz5LiL
System.out.println(encodeBase64);
//Base64 解码
byte[] decodeBase64 = Base64.decodeBase64(encodeBase64);
String result = new String(decodeBase64);
//千里之行始于足下
System.out.println(result);
//读取本地文件生成Base64字符串
FileInputStream fileInputStream = new FileInputStream(new File("D:\\微信图片_20210811143052.jpg"));
String string = Base64.encodeBase64URLSafeString(fileInputStream.readAllBytes());
System.out.println(string);
//Base64字符串解析为字节数组写到文件中
byte[] bytes = Base64.decodeBase64(string);
FileOutputStream outputStream = new FileOutputStream(new File("D:\\1.jpg"));
outputStream.write(bytes);
outputStream.flush();
}
/**
* 16 进制转换
*
* @throws DecoderException
*/
@Test
public void test2() throws DecoderException {
String content = "千里之行始于足下";
//文本转成 16 进制的字符串
String hexString = Hex.encodeHexString(content.getBytes());
//e58d83e9878ce4b98be8a18ce5a78be4ba8ee8b6b3e4b88b
System.out.println(hexString);
//将 16 进制的文本转为 10 进制的字节数组,接着即可转为源字符串.
byte[] decodeHex = Hex.decodeHex(hexString);
String s = new String(decodeHex);
//千里之行始于足下
System.out.println(s);
}
}
MessageDigest 信息摘要
public class DigestEncoders {
/**
* md5 摘要算法 1
*/
@Test
public void md5Digest1() {
String message = "千里之行始于足下";
/**getDigest(final String algorithm) 返回的是 Java JDK 原生的 {@link MessageDigest} 信息摘要对象
* 也可以使用 DigestUtils.getMd5Digest() 直接返回 md5 信息摘要.
* {@link MessageDigestAlgorithms} 中定义了全部的摘要算法*/
MessageDigest md5 = DigestUtils.getDigest(MessageDigestAlgorithms.MD5);
//生成摘要
byte[] digest = md5.digest(message.getBytes());
/**encodeHexString(final byte[] data, final boolean toLowerCase):将摘要转成可视化的 16 进制字符串.
* data:十进制的字节数组
* toLowerCase:结果中的字母是否转为小写,默认为 true 转为小写.*/
String hexString = Hex.encodeHexString(digest, true);
//d0d112cb6045f47b36e34f784975129c
System.out.println(hexString);
}
/**
* md5 摘要算法 2
*/
@Test
public void md5Digest2() {
/** md5Hex(final String data): 对 data 进行 md5 提取摘要,并转为 16 进制。
* 同理还会有 sha256Hex、md2Hex 等等.*/
String message = "千里之行始于足下";
String md5Hex = DigestUtils.md5Hex(message);
//d0d112cb6045f47b36e34f784975129c
System.out.println(md5Hex);
}
/**
* 对文件提取摘要信息 1
*/
@Test
public void md5Digest3() {
File file = new File("D:\\冰点文库下载.rar");
try {
FileInputStream fileInputStream = new FileInputStream(file);
String sha256Hex = DigestUtils.sha256Hex(fileInputStream);
//c1400a2e02931e3928dde4a3f46faf0e71f63a90b734573129bcef4c80a793a0
System.out.println(sha256Hex);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 对文件提取摘要信息 2
*/
@Test
public void md5Digest4() {
File file = new File("D:\\冰点文库下载.rar");
try {
MessageDigest sha256Digest = DigestUtils.getSha256Digest();
byte[] digest = DigestUtils.digest(sha256Digest, file);
String encodeHexString = Hex.encodeHexString(digest);
//c1400a2e02931e3928dde4a3f46faf0e71f63a90b734573129bcef4c80a793a0
System.out.println(encodeHexString);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}