Base64和Base64URL

Base64 编码简介

首先,Base64 是一种编码方式,而不是真正的加密方式。即使算,Base64 也仅用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。

Base64 使用64个通用的可打印字符来存储和表示二进制数据,同时也可以进行简单的加密,生成不可读文本。Base64字符集包括大、小写英文字母,阿拉伯数字0-9,以及“+”和“/”,以及作后缀填充的“=”共计65个字符,其中编码时只使用前64个。

如何使用这64个字符来表示二进制数据呢?
这就需要在十进制的0-63以及使用的64个字符之间建立一一对应关系。具体的映射是将十进制的0-63依次与“A-Z”,“a-z”,“0-9”,“+”,“/”一一对应。在计算机中64种可能只需要6bit就能表达(2的6次方=64),因此Base64表示法实质上是以6bit为单位,使用规定的通用字符来表示和存储二进制数据。
Base64编码表

码值字符码值字符码值字符码值字符
0A16Q32g48w
1B7R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

使用工具 http://www.lzltool.com/base64 可以在线解析Base64,将Base64转换成字符串或十六进制、或Base64Url格式

Base64URL编码简介

由于标准的Base64编码中可能出现“+”和“/”,在URL中就不能直接作为参数,所以又有一种“url safe”的base64编码,其实就是把字符“+”和“/”分别变成“-”和“_”

由于“=”字符也可能出现在Base64编码中,但“=”用在URL、Cookie里面会造成歧义,所以,Base64URL编码后会把“=”去掉。去掉“=后怎么解码呢?因为Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数,因此,需要加上“=”把Base64字符串变为4的倍数,就可以正常解码了。

使用工具 http://www.lzltool.com/base64url 可以在线解析Base64URL,将Base64URL转换成字符串或十六进制、或Base64格式

总结

BASE64URL编码的流程:
1、明文使用BASE64进行加密
2、在BASE64的基础上进行一下的编码:
    1)去除尾部的"="
    2)把"+“替换成”-"
    3)把"/“替换成”_"

BASE64URL解码的流程:
1、把BASE64URL的编码做如下解码:
    1)把"-“替换成”+"
    2)把"_“替换成”/"
    3)(计算BASE64URL编码长度)%4
        a)结果为0,不做处理
         b)结果为2,字符串添加"=="
         c)结果为3,字符串添加"="
2、使用BASE64解码密文,得到原始的明文

java Base64加密解密代码

import java.util.Base64;

public class Base64Encryption {
    public static String encode(String str) {
        return Base64.getEncoder().encodeToString(str.getBytes());
    }

    public static String decode(String str) {
        byte[] decodedBytes = Base64.getDecoder().decode(str);
        return new String(decodedBytes);
    }
}

java Base64URL加密解密代码

import java.util.Base64;

public class Base64URL {
    public static String encode(String input) {
        byte[] encodedBytes = Base64.getUrlEncoder().encode(input.getBytes());
        return new String(encodedBytes);
    }

    public static String decode(String input) {
        byte[] decodedBytes = Base64.getUrlDecoder().decode(input.getBytes());
        return new String(decodedBytes);
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值