当前位置: 首页 > article >正文

Base64编码解密:解码下载邀请

在这里插入图片描述

1. Base64编码基础

Base64(基底 64)是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 log ⁡ 2 64 = 6 \log_2{64}=6 log264=6,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节相当于 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可由 4 个可打印字符来表示。在 Base64 中的可打印字符包括字母 A-Z、a-z、数字 0-9,这样共有 62 个字符,此外两个可打印符号在不同的系统中有所不同。一些如 uuencode 的其他编码方法,以及之后 BinHex 的版本使用不同的 64 字符集来代表 6 个二进制数字,但不被称为 Base64。

Base64 常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。

base64图片在线转换工具https://tool.chinaz.com/tools/imgtobase

Base64在线加密、解密https://www.bejson.com/enc/base64/

2. 虚拟案例:解码下载邀请

想象一下,你收到了一个神秘的Base64编码信息:“VGVzdEFwcDpBcHBEb3duZ3JvdW5kOlwvXCI=”,据传这是通往一款名为“TestApp”的软件下载邀请。接下来,我们将一步步解码并探索如何安全地下载它。

有很多在线工具解码,也可以自行编写解码脚本,以Python代码为例,分析解码结果,解码信息指向“TestApp:AppDownload:/”,可能是指示访问 TestApp 官方网站或特定下载页面进行下载。

import base64

encoded_string = "VGVzdEFwcDpBcHBEb3duZ3JvdW5kOlwvXCI="
decoded_bytes = base64.b64decode(encoded_string)
decoded_string = decoded_bytes.decode('utf-8')
print(decoded_string)

也可以用Java处理。

import java.util.Base64;
import java.nio.charset.StandardCharsets;

public class Base64EncodingDecodingExample {

    /**
     * 对给定的字符串进行Base64编码。
     * @param input 需要编码的原始字符串。
     * @return 编码后的Base64字符串。
     */
    public static String encodeStringToBase64(String input) {
        // 将字符串转换为字节数组,然后进行Base64编码
        byte[] encodedBytes = Base64.getEncoder().encode(input.getBytes(StandardCharsets.UTF_8));
        return new String(encodedBytes, StandardCharsets.UTF_8);
    }

    /**
     * 解码Base64编码的字符串回原始字符串。
     * @param encodedStr Base64编码的字符串。
     * @return 原始的解码字符串。
     */
    public static String decodeBase64ToString(String encodedStr) {
        // 将Base64编码的字符串转换回字节数组,然后解码为原始字符串
        byte[] decodedBytes = Base64.getDecoder().decode(encodedStr);
        return new String(decodedBytes, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) {
        String originalString = '这是一个Base64编码解密实战的虚拟案例';
        
        // 编码过程
        String encodedString = encodeStringToBase64(originalString);
        System.out.println('原始字符串: ' + originalString);
        System.out.println('Base64编码后的字符串: ' + encodedString);
        
        // 解码过程
        String decodedString = decodeBase64ToString(encodedString);
        System.out.println('Base64解码后的字符串: ' + decodedString);
        
        // 确认解码后的内容与原始内容一致
        assert originalString.equals(decodedString) : '解码前后内容不一致';
    }
}

3. RFC 4648 標準的 Base64 索引表

十進制 二進制 字元 十進制 二進制 字元 十進制 二進制 字元 十進制 二進制 字元
0 000000 A 16 010000 Q 32 100000 g 48 110000 w
1 000001 B 17 010001 R 33 100001 h 49 110001 x
2 000010 C 18 010010 S 34 100010 i 50 110010 y
3 000011 D 19 010011 T 35 100011 j 51 110011 z
4 000100 E 20 010100 U 36 100100 k 52 110100 0
5 000101 F 21 010101 V 37 100101 l 53 110101 1
6 000110 G 22 010110 W 38 100110 m 54 110110 2
7 000111 H 23 010111 X 39 100111 n 55 110111 3
8 001000 I 24 011000 Y 40 101000 o 56 111000 4
9 001001 J 25 011001 Z 41 101001 p 57 111001 5
10 001010 K 26 011010 a 42 101010 q 58 111010 6
11 001011 L 27 011011 b 43 101011 r 59 111011 7
12 001100 M 28 011100 c 44 101100 s 60 111100 8
13 001101 N 29 011101 d 45 101101 t 61 111101 9
14 001110 O 30 011110 e 46 101110 u 62 111110 +
15 001111 P 31 011111 f 47 101111 v 63 111111 /
填充 =


http://www.kler.cn/a/518310.html

相关文章:

  • 使用 Tauri 开发桌面应用程序:新一代的轻量解决方案
  • 编写python 后端 vscode 安装插件大全
  • DDD架构实战第七讲总结:分层模型和代码组织
  • Redis内存面试与分析
  • 如何在 Windows 上安装 MySQL(保姆级教程2024版)
  • RocketMQ底层哪里用了Netty
  • 51单片机(四)定时器
  • AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引发DDoS风险/OpenAI 代理工具即将发布
  • 25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理
  • 「全网最细 + 实战源码案例」设计模式——抽象工厂模式
  • 利用大语言模型(LLM)增强软件测试自动化的最佳实践
  • 【韩顺平Java笔记】第8章:面向对象编程(中级部分)【354-358】
  • AI模型提示词(prompt)优化-实战(一)
  • css遇到的一些问题
  • Kafka生产者ACK参数与同步复制
  • 简洁明了:介绍大模型的基本概念(大模型和小模型、模型分类、发展历程、泛化和微调)
  • 人工智能丨视觉识别在自动化测试中的应用
  • npm link 作用
  • 如何理解 Web3 背后的技术:区块链与去中心化存储
  • PHP异步非阻塞MySQL客户端连接池