#NCST202506B. Base64 decoder
Base64 decoder
题目背景
又是一年毕业季,我们的学长学姐们即将离开我们的校园。在离开之前,他们多多少少都会因为毕业论文或毕业设计影响。为了减少压力,『 winterl 』 现在就开始写毕业设计了,他现在需要完成毕业设计(校赛管理系统)的数据传输功能。为了防止数据在传输的过程中被黑客窃取,『 winterl 』 专门学习了密码学,打算使用 UTF-8
编码的 Base64
加密传输。
题目描述
现在,你需要帮助 『 winterl 』 对使用 Base64
的加密内容 进行解密。具体解密流程如下:
-
去除填充:先去掉末尾的
=
( 或 个) -
字符反查:将每个字符反向映射为 位二进制值
-
位合并:每 个 位二进制值合并为 个 位二进制值(也就是 个字节)
若不够 个就舍弃无法变成字节的,如 000000 000111 舍弃末尾 0111
-
ASCII还原:将字节转为原始字符
Base64 字符表: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
输入格式
第一行,一个正整数 ,表示每个测试点有 组测试样例
对于每组测试样例
仅一行字符串 ,表示题目给定的Base64
的加密内容
其中 意为字符串 的长度
输入保证加密内容前的是
ASCII
可见字符(空格除外)。
输出格式
一共 行,对于每行输出,打印每组测试样例的解码结果
样例输入输出
1
aGVsbG8gd29ybGQ=
hello world
10
SQ==
bG92ZWQ=
dG8=
dGhl
bW9vbg==
YW5k
YmFjaw==
YWdhaW4=
Lg==
SSBsb3ZlZCB5b3UgdG8gdGhlIG1vb24gYW5kIGJhY2sgYWdhaW4u
I
loved
you
to
the
moon
and
back
again
I loved you to the moon and back again
样例解释
对于样例
-
去除填充:
aGVsbG8gd29ybGQ
-
字符反查:
011010
000110
010101
101100
011011
000110
111100
100000
011101
110110
111101
110010
011011
000110
010000
-
位合并:
01101000
01100101
01101100
01101100
01101111
00100000
01110111
01101111
01110010
01101100
01100100
舍弃多余内容 -
ASCII还原:
h
,e
,l
,l
,o
,空格
,w
,o
,r
,l
,d
附录(Base64字符反向映射表)
字符 | 反向映射值 | 字符 | 反向映射值 | 字符 | 反向映射值 | 字符 | 反向映射值 |
---|---|---|---|---|---|---|---|
A | 000000 | B | 000001 | C | 000010 | D | 000011 |
E | 000100 | F | 000101 | G | 000110 | H | 000111 |
I | 001000 | J | 001001 | K | 001010 | L | 001011 |
M | 001100 | N | 001101 | O | 001110 | P | 001111 |
Q | 010000 | R | 010001 | S | 010010 | T | 010011 |
U | 010100 | V | 010101 | W | 010110 | X | 010111 |
Y | 011000 | Z | 011001 | a | 011010 | b | 011011 |
c | 011100 | d | 011101 | e | 011110 | f | 011111 |
g | 100000 | h | 100001 | i | 100010 | j | 100011 |
k | 100100 | l | 100101 | m | 100110 | n | 100111 |
o | 101000 | p | 101001 | q | 101010 | r | 101011 |
s | 101100 | t | 101101 | u | 101110 | v | 101111 |
w | 110000 | x | 110001 | y | 110010 | z | 110011 |
0 | 110100 | 1 | 110101 | 2 | 110110 | 3 | 110111 |
4 | 111000 | 5 | 111001 | 6 | 111010 | 7 | 111011 |
8 | 111100 | 9 | 111101 | + | 111110 | / | 111111 |