首页 > 其他分享 >手算base64

手算base64

时间:2023-08-24 18:56:32浏览次数:40  
标签:字符 Base64 编码 二进制 base64 手算 ascii

CSP2021考了……

什么鬼……

base64是什么

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。

聪明的你肯定发现了,以上来自:base64_百度百科 (baidu.com)

base64的意义

有些情况下传输不可见字符不方便。比如一个纯文本协议,二进制中可能会出现被当做控制字符处理的部分。这样引起传输失败。

又由于每个地方的路由存在差异,无法统一,则需要base64这么一个编码方式。

因为base64都是可见字符(A~Z,a~z,0~9,+,/),所以不会出现以上问题。

请注意,base64并不是加密算法,不适用于加密通信。

base64的表格

首先,base64有以下字符对应表:

十进制下标 字符
0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
8 I
9 J
10 K
11 L
12 M
13 N
14 O
15 P
16 Q
17 R
18 S
19 T
20 U
21 V
22 W
23 X
24 Y
25 Z
26 a
27 b
28 c
29 d
30 e
31 f
32 g
33 h
34 i
35 j
36 k
37 l
38 m
39 n
40 o
41 p
42 q
43 r
44 s
45 t
46 u
47 v
48 w
49 x
50 y
51 z
52 0
53 1
54 2
55 3
56 4
57 5
58 6
59 7
60 8
61 9
62 +
63 /
Padding =

Padding是什么意思呢?我们到时候会举个例子。

base64的流程

我们先把字符按照ascii编码:

ascii 字符
01001111 O
01110010 r
01111010 z

由于考场上我们不可能找到ascii表,所以我们要熟记:

ascii 字符
Space 32
0 48
A 65
a 97

如果考了其它的只能说出题人丧心病狂

然后我们知道,ascii可以转化为8位二进制。那么我们可以得到以下表格:

然后我们按照每6位为一字符按照base64下标转换为新的字符串:

然后我们可以得到base64的新编码了!!

base64的Padding

那你肯定会说,如果不足刚好可以用6分开怎么办呢?

例如:

怎么办呢?我们可以选择补上0:

但是我们可能会发现,如果解码时混淆了怎么办呢?

所以我们需要加上Padding—— =

则变成:

如果我们要补上两位0:

然后你的一部分分就拿到了。

剩下就是解码了:

举个例子:cXB6Yw==

首先,对于原字符串,我们需要对其二进制编码。

如果结尾有 =。那么我们需要相应的减去结尾的0。

如例子:二进制编码后为:

然后因为后面有两个等号,所以要删去0000:

结束,然后你就很容易的做出那道题了,耶!


祝大家CSP2023 RP++。

……额,CSP2024,2025,2026,2027,总之都 RP++。

标签:字符,Base64,编码,二进制,base64,手算,ascii
From: https://www.cnblogs.com/znpdco/p/17654930.html

相关文章

  • Base64编码和解码
    1、依赖sun.misc.BASE64Decoder.jar/***Base64编码*@paramdata要加密的字符数组*@returnString加密后的16进制字符串*/publicstaticStringencode(byte[]data){returnnewBASE64Encoder().encode(data);}/***Base64解码*@paramdata要解密......
  • python截图、压缩、转base64,可以用2m压缩到100k,肉眼不失真
    1importwin32gui2importwin32ui3importwin32con4importnumpyasnp5importcv26importbase6478#通过句柄截取窗口内容9defcapture_window_by_handle(handle):10left,top,right,bottom=win32gui.GetWindowRect(handle)11width......
  • 图片转base64,base64转图片,图片对象转图片字节,图片字节转图片对象
    demo图片转base64defimage_to_base64(image_path):importbase64withopen(image_path,"rb")asimage_file:image_data=image_file.read()base64_encoded=base64.b64encode(image_data).decode("utf-8")retur......
  • python - base64转图片
    折腾了base64转png弄了很久,使用以下代码进行转换后图片一直打不开importbase64imgData='data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD后面省略'imgData=imgData.split(',')[1]imgData=base64.b64decode(imgData)withopen('test.png','wb')as......
  • fastjson对接口参数的某个字段不打印输出,如文件的base64字符串
    fastjson对接口参数的某个字段不打印输出,如文件的base64字符串packagecom.example.core.mydemo.json5;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.annotation.JSONField;/**需要提供getset方法,如果使用@Datalombok不生效(关键)**publicclassIte......
  • base64图片文件上传OSS,下载OSS图片转换为InputStream,文件转base64,base64转文件工具类
    base64图片文件上传OSS,下载OSS图片转换为InputStream,文件转base64,base64转文件工具类OSSUtils.javapublicclassOSSUtils{privatestaticLoggerlogger=LoggerFactory.getLogger(OSSUtils.class);privatestaticfinalStringACCESS_ID="阿里云oss参数acce......
  • Base64及其Python实现
    1.什么是Base64Base64是一种基于64个可打印字符来表示二进制数据的表示方法Base64是一种编码方式,提及编码方式,必然有其对应的字符集合。在Base64编码中,相互映射的两个集合是:二进制数据{0,1}{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,......
  • Base64 加密和解密
    Console.WriteLine(base64Encrypt("李狗蛋",true));Console.WriteLine(base64Decode(base64Encrypt("李狗蛋",true)));//base64加密staticstringbase64Encrypt(stringstr,boolIsEncrypt){if(IsEncrypt){returnSystem.Convert.ToB......
  • 【web_逆向07】base64变种
    简介标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSISQL中已将“%”号用作通配符。解决方案为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填......
  • Flutter实现将base64解码为image格式,并展示到页面上
    在Flutter中,你可以使用Image.memory来将Base64解码为图像并将其显示在页面上。下面是一个将Base64解码为图像并展示的示例代码:import'dart:convert';import'package:flutter/material.dart';classBase64ImageextendsStatelessWidget{finalStringbase64String;Bas......