Redian新闻
>
通过示例来学习 Bash base64 的编码和解码 | Linux 中国

通过示例来学习 Bash base64 的编码和解码 | Linux 中国

科技
 
导读:你想了解 Base64 编码和解码的方法吗?在本教程中,我们使用 Bash shell 脚本和各种示例解释了 Base64 编码和解码步骤。
本文字数:3128,阅读时长大约:4分钟

Base64 编码方法可以将二进制数据转换为文本,如此编码数据可以在任何通信媒介进行传输。这种编码方法主要用于电子邮件加密的过程。

总体而言,Base64 编码方法是一种二进制到文本的编码方案,以 ASCII 字符串格式表示 8 字节的二进制数据。使用这种编码方法在各种媒介之间传输数据时有几个优势,尤其是对于那些能可靠地支持文本内容的媒介。因此,Base64 编码方法在万维网上被广泛使用。这种编码方案最常用于电子邮件附件的编码上。

根据 Base64 编码表,二进制数据可以经 Base64 编码后可以转换为 64 个不同的 ASCII 字符,包含大写字母 A 到 Z,小写字母 a 到 z,数字 0 到 9,以及符号 + 和 /,这些字符在传输和打印上十分便捷。

这 64 个 ASCII 字符代表着从 000000 到 111111 的二进制值。每个非末尾的 Base64 编码字符恰好代表 6 位二进制值。

Base64 Index Table

Bash base64 的编码和解码

句法

在我们提供示例之前,首先介绍 Base64 的基本语法。

  1. base64 [OPTIONs] [INFILE] [OUTFILE]
◈ 选项(Option):参照下面的表格,你可以提供任何的选项或组合多个选项。
◈ 输入(INFILE):你可以从标准输入(如命令行)或文件中输入。
◈ 输出(OUTFILE):你可以将输出重定向到标准输出,如终端或文件中。
< 如显示不全,请左右滑动 >
选项描述
-e 或者 --encode此选项用于对标准输入的数据或从文件中读入的数据进行编码。这是默认选项。
-d 或者 --decode此选项用于对标准输入的数据或从文件中读入的已 Base64 编码数据进行解码。
-n 或者 --noerrcheck默认情况下,Base64 在解码数据时,会自动检查是否有错误。你可以使用该选项在解码时忽略检查。
-i 或 --ignore-garbage此选项用于在解码时忽略非字母字符。
-u 或者 --help此选项用于获取有关使用此命令的信息。

示例 1:基本编码

在 Linux 中,默认已安装好 Base64 软件包。因此,你可以轻松地从命令行使用 Base64。要对一个字符串或文本进行编码,你可以通过管道将其传递到 base64 命令,并获取待编码的文本。在下面的示例中,对字符串 debugpoint.com 进行了 Base64 编码。

  1. echo "debugpoint.com" | base64

bash base64 encode and decode - example 1

结果是经过 Base64 编码后的字符串。

解释

Base64 编码方法使用下面的几个步骤来转换输入的数据。首先,每个输入字符转换为 8 位二进制值,接着,二进制字符串拆分为一组组 6 位的二进制值,然后,每个 6 位的二进制值被转换为十进制值。

最后,每个十进制值都通过 Base64 编码索引表转换为 Base64 字符。

在上面的示例中,第一个字符 d 被转换为二进制 01100100。前 6 位是 011001,转换为十进制是 2525 在 Base64 编码索引表中对应着 Z。整个输入的文本流都像如此编码。请参阅以下编码过程的示例。

Base64 Encode and Decode – inner working

示例 2:基本解码

要解码字符串,需要将编码值传递给 base64 命令,选项为 --decode,它将输出你之前输入的字符串。

bash base64 encode and decode - example 2 (decode the same example)

示例 3:对文本文件进行编码

示例 1 中的同一命令也可用于编码文本文件,并将输出重定向到另一个文本文件。方法如下。

  1. base64 example3.txt > example3-encoded.txt

Encode a text file

示例 4:对文本文件进行解码

要解码使用 Base64 编码的文本文件,只需使用 --decode 或 -d 选项,并传递文本文件名。

  1. base64 -d example3-encoded.txt

示例 5:对用户输入的数据进行编码

使用 Bash shell 编程,你可以通过终端接收用户的输入,并对其进行 Base64 编码。你需要先编写一个简单的 shell 脚本,并在授予可执行权限后执行。

以下就是一个简单的示例,它从用户那里获得输入,然后进行 Base64 编码,最终显示编码的字符串。

  1. #!/bin/bash
  2. #Sample program to take input, encode to base64 and display on terminal
  3. #Example by www.debugpoint.com
  4. echo "Enter text for encoding to base64:"
  5. read input_text
  6. output_text=`echo -n $input_text | base64`
  7. echo "The Base64 Encoded text is: $output_text"

Custom input - base64 encode and decode using script

示例 6:用 Base64 进行简单的身份认证

你可以运用上述的编码和解码方法,实现一个简单的身份验证系统。你可以让用户输入密码或密码,然后将密码存储在文件中。或者进行实时比较。

如果存储的编码字符串与用户输入的文本再编码的字符串相匹配,则用户可以通过验证。虽然这是一种检查身份验证的很简单的方法,但有时这对一些简单的业务案例很有用。

  1. #!/bin/bash
  2. #Sample program to take input, encode to base64 and display on terminal
  3. #Example by www.debugpoint.com
  4. echo "Type your password"
  5. read pwd1
  6. decoded_text=`echo 'U2lsZW5jZSBpcyBnb2xkZW4h' | base64 --decode`
  7. if [[ $pwd1 == $decoded_text ]]
  8. then
  9. echo "You are a valid user."
  10. else
  11. echo "You are NOT a valid user."
  12. fi

A Simple Authentication using bash base64

总结

我希望你能通过这些示例,学会 Base64🔗 linux.die.net 编码和解码的基础知识。此外,你也了解到 Base64 的内部编码方式。如果这对你很有帮助,或你还需要有关此主题的其他教程,请在下面的评论区中告诉我吧。


via: https://www.debugpoint.com/bash-base64-encode-decode/

作者:Arindam 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


LCTT 译者 :chai001125
🌟🌟
翻译: 8.0 篇
|
贡献: 23 天
2022-10-06
2022-10-29
https://linux.cn/lctt/chai001125
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
如何在 Linux 中使用媒体传输协议访问安卓设备的内部存储和 SD 卡 | Linux 中国如何通过 chroot 恢复 Arch Linux 安装 | Linux 中国10 大可以摧毁你的 Linux 的命令 | Linux 中国解决 Linux 中的 “Bash: Command Not Found” 报错 | Linux 中国微软决定放弃 Teams 的 Linux 应用,而用渐进式网页应用取代 | Linux 中国bāo huā shēng?bō huā shēng?即使对那些不知道 Markdown 的人来说,Marktext 也是一个绝佳的编辑器 | Linux 中国哇!Torvalds 为自己的 Apple M2 Macbook 专门修改了 Fedora Linux | Linux 中国用惯 Linux 的人第一次用 Windows 或 macOS 会怎样? | Linux 中国哦,不!Fedora 正在放弃对流行的视频编解码器的支持 | Linux 中国5 款适用于 Linux 的笔记应用 | Linux 中国Atoms 是一个可以让你轻松管理 Linux Chroot 环境的 GUI 工具 | Linux 中国System 76 将不会发布 Pop!_OS 22.10 Linux 发行版 | Linux 中国使用 Podman Desktop 在 Fedora Linux 上管理容器 | Linux 中国Arch Linux 中用于包管理的图形化应用 | Linux 中国Linux inxi 命令的 3 种使用方法 | Linux 中国Blackbox:极简主义 Linux 用户的美观终端 | Linux 中国传统的 Linux 软件包格式不适合现代应用 | Linux 中国给自己定了一个小目标操作系统人机对话!Linux OS大谈Windows与macOS:值得学习,但被Linux碾压如何在最小安装的 CentOS、RHEL、Rocky Linux 中设置互联网 | Linux 中国Tuxedo 已对所有用户开放基于 Ubuntu 的 TUXEDO OS | Linux 中国茄汁虾仁Fedora Linux 的各种版本 | Linux 中国食杂店的生存之道一个适用于苹果芯片的原生 Linux GPU 驱动程序几乎就绪! | Linux 中国通过 SSH 在远程 Linux 系统上执行命令 | Linux 中国畅游法国(12)-玫瑰的海岸准备好在 Debian Linux 上获得 Ubuntu MATE 的体验吧! | Linux 中国你应该知道的 22 个基本的 Linux 网络命令 | Linux 中国关于 Linux 和 Git 的创造者 Linus Torvalds 的 20 件趣事 | Linux 中国我如何使用现场 USB 设备恢复我的 Linux 系统 | Linux 中国地主兼房客两面的观察在 Linux 中使用 Etcher 创建可启动 USB – 下载和使用指南 | Linux 中国Rosalía 登意大利版《VOGUE》封面!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。