URL安全的Base64算法

2022/5/25 1:23:03

本文主要是介绍URL安全的Base64算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

URL安全的Base64算法

base64是取3个字节(24位)的数据强行组成4个字节(32位)的数据做为一个分组,24位分成4个字节的话,每个字节分到6位,然后前面补两位0,然后这个字节的值位索引去base64表找值。

    1. 因为前面补两个0,那么只有6位来算索引,最长就是2^6=64,所以base64表只有64个。
    1. 因为每4个字节一个分组,所以base64后的长度肯定是4的倍数。
    1. 因为不是所有的字符串都能被3整除,所以存在不够的情况,那么就在后面补了=号。
    1. 因为很多URL中包含了+ / =字符,做http传输的时候URL编码会把这三个字符编码掉,所以URL安全的处理是把+换成-,把/换成_,把=去掉。

所以URL安全的base64在encode后会这样处理:
string_replace(data, "+", "-"); string_replace(data, "/", "_"); string_replace(data, "=", "");
URL安全的base64首先会这样处理在decode:

string_replace(data, "-", "+");
string_replace(data, "_", "/");
int mod4 = data.size()%4;
if (mod4 > 0)
{
    int num = 4 - mod4;
    data.append(num, '=');

}

base64?

网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。

使用场景:

使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

构成:

Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。

转换流程:

第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
第二步,将上面的24个二进制位每6个一组,共分为4组。
第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
第四步,根据Base64编码对照表(见下图)获得对应的值。

0 A  17 R   34 i   51 z

1 B  18 S   35 j   52 0

2 C  19 T   36 k   53 1

3 D  20 U   37 l   54 2

4 E  21 V   38 m   55 3

5 F  22 W   39 n   56 4

6 G  23 X   40 o   57 5

7 H  24 Y   41 p   58 6

8 I  25 Z   42 q   59 7

9 J  26 a   43 r   60 8

10 K  27 b   44 s   61 9

11 L  28 c   45 t   62 +

12 M  29 d   46 u   63 /

13 N  30 e   47 v

14 O  31 f   48 w   

15 P  32 g   49 x

16 Q  33 h   50 y

代码验证测试

import sun.misc.BASE64Encoder;

/**
 * @author zzs
 */
public class Base64Utils {

	public static void main(String[] args) {
		String man = "Man";
		String a = "A";
		String bc = "BC";

		BASE64Encoder encoder = new BASE64Encoder();
		System.out.println("Man base64结果为:" + encoder.encode(man.getBytes()));
		System.out.println("BC base64结果为:" + encoder.encode(bc.getBytes()));
		System.out.println("A base64结果为:" + encoder.encode(a.getBytes()));
	}
}

结果

Man base64结果为:TWFu
BC base64结果为:QkM=
A base64结果为:QQ==


这篇关于URL安全的Base64算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程