Apache Commons Codec 常用工具类库

这篇博客介绍了Apache Commons Codec库的使用,包括Base64编码解码、16进制转换以及MessageDigest信息摘要算法如MD5和SHA256。示例代码展示了如何对文本和文件进行编码、解码和摘要计算,并提供了可视化16进制字符串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
        }
    }

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李少谦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值