ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

URL安全的Base64算法

2022-05-24 09:00:43  阅读:197  来源: 互联网

标签:24 Base64 字节 URL base64 算法 data


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==

标签:24,Base64,字节,URL,base64,算法,data
来源: https://www.cnblogs.com/guobabiancheng/p/16304212.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有