Base64不补位加密(安全加密)

简介

最近接到个需求,需要对报文进行Base64加密处理,参考数据样例发现要求的加密后格式不使用“=”符号补位。研究了下,记录结果。

处理方法

引入

import org.apache.commons.codec.binary.Base64;

使用

String abc = "ABC";
Base64.encodeBase64URLSafeString(abc.getBytes()) ;

对比测试:

            System.out.println("Base64url 1:" + java.util.Base64.getUrlEncoder().encodeToString(test.getBytes()));
            System.out.println("Base64url 2:" + org.apache.commons.codec.binary.Base64.encodeBase64String(test.getBytes()));
            System.out.println("Base64url 3:" + org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(test.getBytes()));

结果:
在这里插入图片描述
在这里插入图片描述

附:Base64加密补位规则

所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

转换方式可以分为四步:

第一步,将每三个字节作为一组,一共是24个二进制位。
第二步,将这24个二进制位分为四组,每个组有6个二进制位。
第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。
第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。

Base64将三个字节转化成四个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。

此时如果字节数不足三,则这样处理:

a)二个字节的情况:将这二个字节的一共16个二进制位,按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码,再在末尾补上一个"="号。
比如,“Ma"这个字符串是两个字节,可以转化成三组00010011、00010110、00010000以后,对应Base64值分别为T、W、E,再补上一个”=“号,因此"Ma"的Base64编码就是TWE=。
b)一个字节的情况:将这一个字节的8个二进制位,按照上面的规则转成二组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码,再在末尾补上两个”="号。
比如,“M"这个字母是一个字节,可以转化为二组00010011、00010000,对应的Base64值分别为T、Q,再补上二个”="号,因此"M"的Base64编码就是TQ==。

参考文章:
http://www.ruanyifeng.com/blog/2008/06/base64.html

发布了42 篇原创文章 · 获赞 0 · 访问量 1431

猜你喜欢

转载自blog.csdn.net/tcctcszhanghao/article/details/103609581