【专栏】介绍了字符串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 编解码的原理和实现细节,有助于我们更好地理解和处理数据的编码与解码问题,提高程序的性能和可靠性。

相关文章
|
3月前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
8月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1399 103
|
7月前
|
人工智能 Kubernetes Java
回归开源,两位 Java 和 Go 程序员分享的开源贡献指引
Higress是一个基于Istio和Envoy的云原生API网关,支持AI功能扩展。它通过Go/Rust/JS编写的Wasm插件提供可扩展架构,并包含Node和Java的console模块。Higress起源于阿里巴巴,解决了Tengine配置重载及gRPC/Dubbo负载均衡问题,现已成为阿里云API网关的基础。本文介绍Higress的基本架构、功能(如AI网关、API管理、Ingress流量网关等)、部署方式以及如何参与开源贡献。此外,还提供了有效的开源贡献指南和社区交流信息。
652 33
|
3月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
3月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
5月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
171 24
|
4月前
|
消息中间件 人工智能 缓存
Go与Java Go和Java微观对比
本文对比了Go语言与Java在线程实现上的差异。Go通过Goroutines实现并发,使用`go`关键字启动;而Java则通过`Thread`类开启线程。两者在通信机制上也有所不同:Java依赖共享内存和同步机制,如`synchronized`、`Lock`及并发工具类,而Go采用CSP模型,通过Channel进行线程间通信。此外,文章还介绍了Go中使用Channel和互斥锁解决并发安全问题的示例。
239 0
|
5月前
|
Java Shell Maven
【Azure Container App】构建Java应用镜像时候遇无法编译错误:ERROR [build 10/10] RUN ./mvnw.cmd dependency:go-offline -B -Dproduction package
在部署Java应用到Azure Container App时,构建镜像过程中出现错误:“./mvnw.cmd: No such file or directory”。尽管项目根目录包含mvnw和mvnw.cmd文件,但依然报错。问题出现在Dockerfile构建阶段执行`./mvnw dependency:go-offline`命令时,系统提示找不到可执行文件。经过排查,确认是mvnw文件内容异常所致。最终通过重新生成mvnw文件解决该问题,镜像成功构建。
172 1
|
5月前
|
JavaScript Java Go
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
331 0
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
2160 1

推荐镜像

更多