Java base64的加密过程解读

1、为什么要使用Base 64

Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输。 由于一些二进制字符在传输协议中属于

控制字符,不能直接传送,所以需要转换一下才可以。由于某些系统中只能使用ASCII字符,Base64就是用来将非ASCII字符的数

据转换成ASCII字符的一种方法,Base64特别适合在http,mime协议下快速传输数据。比如网络中图片的传输。

Base64,并非安全领域下的加密解密算法。虽然经常遇到所谓的base64的加密解密。但base64只能算是一个编码算法,对数

据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单。

2、Base 64 原理

Base64编码方法,要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效

数据,空余的那两个 bit用0补上成为一个字节。因此Base64所造成数据冗余不是很严重,Base64是当今比较流行的编码方法,

因为它编起来速度快而且简单。

举个例子,有三个字节的原始数据:aaaaaabbbbbbcccccccdddddd(这里每个字母表示一个bit位)

那么编码之后会变成:00aaaaaa00bbbbbb00cccccc00dddddd

所以可以看出base64编码简单,虽然编码后不是明文,看不出原文,但是解码也很简单

2、Base64加密解密的实现方式:两种

package com.liuxd;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

import java.util.Base64;

/**

  • Created by Liuxd on 2018-11-02.

*/

public class TestString {

public static void main(String[] args) throws Exception {
    String str = "青锋剑,偃月刀";

    base64(str);

    enAndDeCode(str);

}


/**
 * Base64
 *
 */
public static void base64(String str) {
    byte[] bytes = str.getBytes();

    //Base64 加密
    String encoded = Base64.getEncoder().encodeToString(bytes);
    System.out.println("Base 64 加密后:" + encoded);

    //Base64 解密
    byte[] decoded = Base64.getDecoder().decode(encoded);

    String decodeStr = new String(decoded);
    System.out.println("Base 64 解密后:" + decodeStr);

    System.out.println();


}

/**
 * BASE64加密解密
 */
public static void enAndDeCode(String str) throws Exception {
    String data = encryptBASE64(str.getBytes());
    System.out.println("sun.misc.BASE64 加密后:" + data);

    byte[] byteArray = decryptBASE64(data);
    System.out.println("sun.misc.BASE64 解密后:" + new String(byteArray));
}

/**
 * BASE64解密
 * @throws Exception
 */
public static byte[] decryptBASE64(String key) throws Exception {
    return (new BASE64Decoder()).decodeBuffer(key);
}

/**
 * BASE64加密
 */
public static String encryptBASE64(byte[] key) throws Exception {
    return (new BASE64Encoder()).encodeBuffer(key);
}

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

Base64编码是从二进制到字符的过亨达返佣HantecMarkets https://www.kaifx.cn/broker/h…
,可用于在HTTP环境下传递较长的标识信息。

采用Base64编码具有不可读性,需要解码后才能阅读。

Base64由于以上优点被广泛应用于计算机的各个领域。

本文讲解如何使用Java语言实现Base64的加密和解密。(基于 JDK 1.8 的新增功能 Base64 特性)

初始版本

代码如下:

复制代码

import java.io.UnsupportedEncodingException;

import java.util.Base64;

/**

  • @author Miracle Luna
  • @version 1.0
  • @date 2019/7/3 18:55

*/

public class Base64Converter {

final static Base64.Encoder encoder = Base64.getEncoder();
final static Base64.Decoder decoder = Base64.getDecoder();

/**
 * 给字符串加密
 * @param text
 * @return
 */
public static String encode(String text) {
    byte[] textByte = new byte[0];
    try {
        textByte = text.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    String encodedText = encoder.encodeToString(textByte);
    return encodedText;
}

原文 

https://segmentfault.com/a/1190000023225842

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java base64的加密过程解读

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址