【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例

简介: 【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。

在计算机领域,字符串的编解码是一项常见且重要的操作。Base64 编码是一种将二进制数据编码为可打印字符的方法,它在数据传输、存储和加密等方面有着广泛的应用。本文将介绍字符串 base64 编解码在多种语言中的实现方式,分为以下三个部分。

一、Base64 编码原理概述

Base64 编码的原理是将每 3 个字节(24 位)的数据转换为 4 个字节(32 位)的可打印字符。具体来说,它通过将 6 位一组的二进制数据映射到特定的字符集中来实现编码。在编码过程中,会使用“=”作为填充字符,以确保编码结果的长度是 4 的倍数。

二、Base64 编解码在不同语言中的实现

  1. Java

在 Java 中,可以使用java.util.Base64类来实现 base64 编码和解码。以下是一个简单的示例代码:

import java.util.Base64;

public class Base64EncodingDecodingExample {
   
    public static void main(String[] args) {
   
        String originalString = "Hello, World!";

        // 编码
        String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes());
        System.out.println("Encoded String: " + encodedString);

        // 解码
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
        System.out.println("Decoded String: " + decodedString);
    }
}
  1. Python

在 Python 中,可以使用base64模块来实现 base64 编码和解码。以下是一个示例代码:

import base64

original_string = "Hello, World!"

# 编码
encoded_string = base64.b64encode(original_string.encode()).decode()
print("Encoded String: " + encoded_string)

# 解码
decoded_string = base64.b64decode(encoded_string).decode()
print("Decoded String: " + decoded_string)
  1. C++

在 C++中,可以使用标准库中的std::string和一些自定义函数来实现 base64 编码和解码。以下是一个示例代码:

#include <iostream>
#include <string>
#include <vector>

std::string base64Encode(const std::string& input) {
    std::string encoded;
    int val = 0;
    int bits = -6;

    for (char c : input) {
        val = (val << 8) + c;
        bits += 8;

        while (bits >= 0) {
            encoded.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val >> bits) & 0x3F]);
            bits -= 6;
        }
    }

    if (bits > -6) {
        encoded.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val << 8) >> (bits + 8)) & 0x3F]);
    }

    while (encoded.size() % 4!= 0) {
        encoded.push_back('=');
    }

    return encoded;
}

std::string base64Decode(const std::string& encoded) {
    std::string decoded;
    int val = 0;
    int bits = -8;

    for (char c : encoded) {
        if (c == '=') {
            break;
        }

        val = (val << 6) + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[c - 'A'];
        bits += 6;

        if (bits >= 0) {
            decoded.push_back(char((val >> bits) & 0xFF));
            bits -= 8;
        }
    }

    return decoded;
}

int main() {
    std::string originalString = "Hello, World!";

    // 编码
    std::string encodedString = base64Encode(originalString);
    std::cout << "Encoded String: " << encodedString << std::endl;

    // 解码
    std::string decodedString = base64Decode(encodedString);
    std::cout << "Decoded String: " << decodedString << std::endl;

    return 0;
}
  1. JavaScript

在 JavaScript 中,可以使用内置的btoa函数进行 base64 编码,使用atob函数进行 base64 解码。以下是一个示例代码:

const originalString = "Hello, World!";

// 编码
const encodedString = btoa(originalString);
console.log("Encoded String: " + encodedString);

// 解码
const decodedString = atob(encodedString);
console.log("Decoded String: " + decodedString);
  1. Go

在 Go 语言中,可以使用标准库中的encoding/base64包来实现 base64 编码和解码。以下是一个示例代码:

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
   
    originalString := "Hello, World!"

    // 编码
    encodedString := base64.StdEncoding.EncodeToString([]byte(originalString))
    fmt.Println("Encoded String: " + encodedString)

    // 解码
    decodedBytes, _ := base64.StdEncoding.DecodeString(encodedString)
    decodedString := string(decodedBytes)
    fmt.Println("Decoded String: " + decodedString)
}

三、总结

通过以上介绍,我们可以看到 base64 编解码在不同语言中的实现方式各有特点。在实际应用中,我们可以根据具体的需求和语言环境选择合适的实现方法。同时,了解 base64 编解码的原理和实现细节,有助于我们更好地理解和处理数据的编码与解码问题,提高程序的性能和可靠性。

相关文章
|
7天前
|
安全 Java 索引
Java字符串类详解
Java字符串类详解
16 1
|
12天前
|
机器学习/深度学习 移动开发 测试技术
《手把手教你》系列技巧篇(五十一)-java+ selenium自动化测试-字符串操作-下篇(详解教程)
【5月更文挑战第15天】自动化测试中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。
32 2
|
2天前
|
存储 Java 测试技术
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
【6月更文挑战第1天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
14 2
滚雪球学Java(47):String类教程:如何在Java中使用字符串操作
|
4天前
|
存储 Java 索引
Java的字符串基本操作
Java的字符串基本操作
|
5天前
|
Java 程序员 API
全民上手大模型--ollama+langchain+通义千问零费用java+python跑通本机大模型
全民上手大模型--ollama+langchain+通义千问零费用java+python跑通本机大模型
37 0
|
5天前
|
Java 开发工具 git
Java判断字符串是否为空
Java判断字符串是否为空
11 0
|
6天前
|
前端开发 Java Docker
【分享】记一次项目迁移(docker java | docker python)
该项目是一个前端Vue3和后端Python+Java的应用,原本部署在CentOS7服务器上通过宝塔面板管理。由于服务器即将到期,计划迁移到另一台使用OpenCloudOS和1Plane的服务器。在尝试构建Docker镜像时,首先为Java应用创建Dockerfile,成功构建并运行。对于Python应用,也创建了Dockerfile,并处理了依赖包的安装。在迁移过程中遇到Java项目加载验证码失败的问题,原因是缺少字体配置。通过在宿主机安装fontconfig并将相关字体文件复制到镜像中解决了问题。最后,前端Vue应用作为静态文件运行,如果使用反代理,需要进行相应配置。
25 1
|
7天前
|
人工智能 Java 开发者
Python与Java:两大编程语言的联系与区别
Python与Java:两大编程语言的联系与区别
|
7天前
|
Java
Java集合类ArrayList应用 | 如何在字符串s1中删除有在字符串s2出现的字符?
这是一个关于Java编程面试题的摘要,题目要求从字符串s1中删除s2中存在的字符。解题思路包括使用ArrayList或StringBuilder实现。ArrayList实现时,遍历s1,如果字符不在s2中,则添加到ArrayList;StringBuilder实现有两种方法,一是新建StringBuilder并追加s1,然后遍历删除s2中的字符,二是直接在原地修改s1的StringBuilder对象。代码示例中展示了这些方法。
26 3
|
11天前
|
缓存 安全 Java
java-- 字符串+拼接详解, 性能调优 (底层原理实现)
java-- 字符串+拼接详解, 性能调优 (底层原理实现)
19 0