JAVA中Base64加密与解密

引言

为了安全的进行数据传输,就需要对数据进行加密与解密操作,Base64就是JAVA提供的加解密处理工具。

背景知识

Base64是一种利用64个可打印字符来表示二进制数据的算法,也是在网络传输中较为常见的一种加密算法。从JDK1.8版本开始,在java.util中提供了Base64的工具类,其中有两个内部类实现数据加密和解密操作。

  • 【数据加密】java.util.Base64.Encoder
    对象获取方法:public static Base64.Encoder.getEncoder()
    数据加密处理:public byte[] encoder(byte[] src)
  • 【数据解密】 java.util.Base64.Decoder
    对象获取方法:public static Base64.Decoder.getDecoder()
    数据加密处理:public byte[] decoder(byte[] src)

最简单的加密解密操作

代码块:

 private static final String str = "abcdefghigklmnopqrstuvwxyz1234567890";

    /**
     * @name: 最简单的加密解密
     * @msg:
     * @param {type}
     * @return:
     */
    public static void simpleRun() {
        String encodiString = new String(Base64.getEncoder().encode(str.getBytes()));
        System.out.println(encodiString);
        encodiString = Base64.getEncoder().encodeToString(str.getBytes());
        System.out.println(encodiString);
        String oldString = String.valueOf(Base64.getDecoder().decode(encodiString));
        System.out.println(oldString);
        oldString = new String(Base64.getDecoder().decode(encodiString));
        System.out.println(oldString);
    }

输出:

//加密数据
YWJjZGVmZ2hpZ2tsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkw
YWJjZGVmZ2hpZ2tsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkw
//解密数据
[B@70dea4e
abcdefghigklmnopqrstuvwxyz1234567890

由此看出,加密操作有两种写法,而解密的时候String.valueOf取不到值。

使用“盐”值进行多次加密解密

代码块:

 private static final String str = "abcdefghigklmnopqrstuvwxyz1234567890";

 /**
     * @name: 使用“盐”值进行多次加密解密
     * @msg:
     * @param {type}
     * @return:
     */
    public static void mRun() {
        String eString = encode(str);
        System.out.println(eString);
        String dString = decode(eString);
        System.out.println(dString);
    }

    private static final String SALT = "neusoft";
    private static final int REPEAT = 5;

    private static String encode(String string) {
        String temp = string + "{" + SALT + "}";
        byte[] data = temp.getBytes();
        for (int i = 0; i < REPEAT; i++) {
            data = Base64.getEncoder().encode(data);
        }
        return new String(data);
    }

    private static String decode(String string) {
        byte[] data = string.getBytes();
        for (int i = 0; i < REPEAT; i++) {
            data = Base64.getDecoder().decode(data);
        }
        return new String(data).replaceAll("\\{\\w+\\}", "");
    }
}

输出:

//利用“盐”值加密5遍数据
VmpGYWExTXlSbk5qUldoWFlsUkdhRlJYTVc5a01XUnhVMnBDYWsxcmNGbFViR2hoWVd4T1JsZHFWbHBsYXpWVVZGWmtVMlJXY0VWVmJYaFlVbnByTUZaR1pIZFVhekZHVGxaV1dGWkZOVkZWYTJRd1RURndWVk5VUm1sU01VcGFWa2MxWVZsWFNuTlRWRlU5
//解密数据
abcdefghigklmnopqrstuvwxyz1234567890

本程序基于Base64的功能实现了一个自定义加密解密程序,使用“盐”值多次加密后确保了密文数据的可靠性。在实际开发中如果不对外公布“盐”值内容和加密次数,就可以在较为安全的环境下进行数据传输。

所学所得,如有不正确之处还请留言指正。
个人博客永久链接:https://neusoft.me/ziyuan/java/2020/05/03/54/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值