我使用过的Linux命令之base64 - 用base64编解码

我使用过的Linux命令之base64 - 用base64编解码

本文链接:http://codingstandards.iteye.com/blog/934928   (转载请注明出处)

用途说明

base64是一种常用的简单的编解码方式。以下内容摘自维基百科。

 

维基百科 Base64 写道
在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号「+」,斜杠「/」,一共64个字符,等号「=」用来作为后缀用途。

完整的base64定义可见 RFC 1421和 RFC 2045。编码后的数据比原始数据略长,为原来的\frac{4}{3}。在电子邮件中,根据RFC 822规定,每76个字符,还需要加上一个回车换行。可以估算编码后数据长度大约为原长的135.1%。

转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,於緩衝區中剩下的bit用0补足。然后,每次取出6(因为26 = 64)个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。

如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;如果最後剩下一個輸入數據,編碼結果後加2個「=」;如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。

 

较高版本的Linux提供了命令行方式的base64编码和解码。

 

什么时候需要用到这个命令?(2011.08.01补充)

在程序中经常弄些License之类的,超过期限或者换台机器就不让使用 ,以实现对自己或公司的劳动成果进行保护 。其实就是一个加密的字符串,里面包括过期时间、功能限制、网卡MAC地址等验证信息,就可以使用base64对这样的信息简单的进行加密和解密。至少我在一些程序中就是这么用的。

 

常用方式

格式:base64

从标准输入中读取数据,按Ctrl+D结束输入。将输入的内容编码为base64字符串输出。

 

格式:echo "str" | base64

将字符串str+换行 编码为base64字符串输出。

 

格式:echo -n "str" | base64

将字符串str编码为base64字符串输出。注意与上面的差别。(2011.08.01 补充)

 

格式:base64 file

从指定的文件file中读取数据,编码为base64字符串输出。

 

格式:base64 -d

从标准输入中读取已经进行base64编码的内容,解码输出。

 

格式:base64 -d -i

从标准输入中读取已经进行base64编码的内容,解码输出。加上-i参数,忽略非字母表字符,比如换行符。

man base64 写道
-i, --ignore-garbage
When decoding, ignore non-alphabet characters.

use --ignore-garbage to attempt to recover from non-alphabet characters (such as newlines) in the encoded stream.
 

格式:echo "str" | base64 -d

将base64编码的字符串str+换行 解码输出。

 

格式:echo -n "str" | base64 -d

将base64编码的字符串str解码输出。 注意与上面的差别。(2011.08.01 补充)

 

格式:base64 -d file

从指定的文件file中读取base64编码的内容,解码输出。

 

使用示例

示例一

[root@web ~]# base64
hello
Ctrl+D aGVsbG8K
[root@web ~]#

[root@web ~]#
[root@web ~]# base64 -d
aGVsbG8K
Ctrl+D hello
base64: invalid input
[root@web ~]#

你会发现,base64命令会输出 base64: invalid input,似乎它把按Ctrl+D后的空行也作为输入来处理了。

 

[root@web ~]# echo "hello" | base64
aGVsbG8K
[root@web ~]# echo "aGVsbG8K" | base64 -d
hello
base64: invalid input
[root@web ~]# echo -n "aGVsbG8K" | base64 -d
hello
[root@web ~]#

使用echo输出字符串时,如果没有-n参数会自动添加换行符,这会令base64命令发晕。

网上有些文章说到了这个事情。

 

示例二

[root@web ~]# cat >1.txt
hello
world

Ctrl+D
[root@web ~]# base64 1.txt
aGVsbG8Kd29ybGQK
[root@web ~]# base64 1.txt >2.txt
[root@web ~]# base64 -d 2.txt
hello
world
base64: invalid input
[root@web ~]#

 

示例三

[root@node56 lic]# base64
CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a

Ctrl+D
Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWEK
[root@node56 lic]# echo "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d
CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91abase64: invalid input
[root@node56 lic]# echo "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d -i
CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@node56 lic]#

[root@node56 lic]# echo -n "Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=" | base64 -d
CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a[root@node56 lic]#
注意上面几种不同使用方式输出信息的差别。
[root@node56 lic]#
[root@node56 lic]# echo "CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a" | base64
Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWEK
[root@node56 lic]# echo -n "CTMW4INTEL,000000000000,20110901,1,1,6h7nrd147i91a" | base64
Q1RNVzRJTlRFTCwwMDAwMDAwMDAwMDAsMjAxMTA5MDEsMSwxLDZoN25yZDE0N2k5MWE=

注意-n参数的处理结果的差别。

 

问题思考

1. 怎么解释base64: invalid input这样的问题?看来只有看看它的源代码了。

 

相关资料

【1】维基百科 Base64

【2】RFCS  RFC 3548 - The Base16, Base32, and Base64 Data Encodings

【3】中国IT实验室 Linux下"base64"命令工具的使用

【4】LANPICE的鬼屋 Linux下利用base64破解Rayfile专用链

 

返回 我使用过的Linux命令系列总目录

 

命令行Base64编解码实战:从原理到自动化脚本集成 Base64编码是一种将二进制数据转换为ASCII字符的编码方案,其核心原理是将每3个字节(24位)的二进制数据映射为4个可打印字符,以确保数据在仅支持文本的通道(如电子邮件、URL参数)中安全传输。理解其编码原理有助于排查数据传输和存储中的兼容性问题。在技术价值上,命令行工具提供了对数据处理流程的完全控制,是实现自动化、保障数据隐私和提升批量处理效率的关键。在应用场景中,运维人员常需在服务器环境中直接处理API响应、配置文件或日志中的编码数据,而开发者在构建CI/CD流水线或处理嵌入式系统数据时,也离不开 阅读详情

相关推荐

kali base64 编码和解码

为了对标准输入/输出或任何文件内容进行编码或解码,Linux 使用 base64 编码和解码系统。对数据进行编码和解码,使数据传输和存储过程更容易。编码和解码不同于加密和解密。通过解码可以很容易地揭示编码数据。所以,这个命令行实用工具不能用于数据安全。字母、数字和“=”符号用于对任何数据进行编码。 **句法: ** base64 [选项] [输入文件] [输出文件]** ** 您可以在 base64 命令中使用不同类型的选项。在编码或解码时,可以从任何文件或标准输入中获取数据。编码或解码后,您可以将输出发送

黑战士的博客 8425

Linux编码解码指令-base64

Linux编码解码指令-base64

llg___的博客 7476

Linux系统下使用命令行进行Base64编码和解码

大家知道,编码是将数据转换为有效传输或存储所需格式的过程。相反,解码是将编码数据转换回其原始格式的过程。今天在这里向大家介绍一下 Base64 编码和解码,以便大家理解与学习。Base64 是将二进制数据转换为 ASCII 的编码方式之一。通常,当二进制数据传输到无法正确处理二进制数据的系统(基于文本的系统)时会出现传输问题,比如信息在传输过程中的丢失或损坏。在这种情况睛,Base64 编码就可以避免出现上述情况。Base64 编码的一些用途是:● 数据压缩● 数据隐藏● 以另一种格式传输数据。

shengyin714959的博客 3733

Linux下用base64命令加解密字符串

Linux下用base64命令加解密字符串 linux系统base64加密算法, linux, base64加密解密

qq_43600166的博客 1万+

Linux C++零依赖URL/Base64编解码库,专为嵌入式Web服务设计

一套开箱即用的Linux平台C++编解码实现,专注URL编码/解码与Base64编码/解码两大功能,不依赖任何第三方库,纯头文件+源码结构清晰。主接口统一定义在codec.h中,具体逻辑分别实现在codec_url.cpp(处理HTTP请求参数中的特殊字符转义与还原)和codec_base64.cpp(支持二进制数据到ASCII字符串的双向转换)。配套Makefile支持一键编译生成静态可用对象,已实际部署于轻量级自研Web服务器中,用于解析GET/POST参数及传输图片、文件等二进制内容。base64和u

sea99的博客 154

线性代数学习笔记(十)——矩阵运算(二)

本篇笔记讲解矩阵的幂运算和矩阵的转置,其中矩阵进行幂运算的前提是矩阵为方阵,矩阵幂运算的两条性质与数的幂运算规则类似;矩阵转置的定义与行列式转置类似,但要注意由于矩阵的行数和列数不同,所以转置之后行数和列数变换。

li2008kui的专栏 1万+

Linux命令-base64命令(编码/解码文件或标准输入输出)

base64将 文件 或 标准输入 编码或解码为标准输出;

RisunJan的博客 3745

Python爬取腾讯视频m3u8加密流实战(附完整代码)

本文提供了一份详细的Python实战教程,指导如何通过抓包分析、模拟请求头与载荷,破解腾讯视频的m3u8加密流防盗链机制,并附上完整代码实现视频片段的下载与合并。教程涵盖从侦察到代码实现的完整流程,并包含参数动态化、多线程下载等高级技巧与避坑指南,旨在帮助开发者掌握流媒体下载的核心技术。

weixin_29090089的博客 1592

【技术】base64编码和解码

1.通用的base64编码和解码,即不依赖其他库的实现,不过这种方法,工作中目前测试不太适用。最近工作中遇到base64编解码,所以深入了解了下。2.依赖openssl库实现编码和解码。如果直接用命令行执行。

路过我的生活呀 803

如何在Android上使用OpenCV进行摄像头标定

如何在Android上使用OpenCV进行摄像头标定,我们这里使用官方一个例程,其实并不难,只是网上的资料少了而已。相机标定是计算机视觉工作的前提,为了确定相机矩阵和畸变参数。

花草的博客 3439

零中频架构实战:用Matlab模拟AD9361收发信号(附完整代码)

本文详细介绍了如何使用Matlab模拟AD9361射频收发器的零中频架构,解决镜像干扰等关键挑战。通过完整的代码示例和系统级建模方法,帮助工程师掌握RFIC设计中的自适应校准算法和性能优化技巧,特别适用于SDR系统开发。

weixin_30733003的博客 540

HoRain云--Linux Base64编码解码终极指南

通过以上步骤,可高效完成字符串和文件的Base64编解码操作。实际使用时,建议优先验证命令结果(如对比解码后内容),确保数据完整性。命令是一种将二进制数据转换为ASCII字符的编码工具(非加密),常用于数据传输或存储。前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!若Base64字符串包含换行符等非字母字符,添加。在末尾添加换行符,避免编码结果包含多余字符。

sinat_57153473的博客 821

恶意代码分析实战——使用Apatedns和Inetsim模拟网络环境

恶意代码分析实战——使用Apatedns和Inetsim模拟网络环境 注:本次实验主要是《恶意代码分析实战》一书中进入动态恶意代码分析篇章的开始,主要通过Apatedns以及Inetsim来模拟为恶意代码提供其需要的网络环境,本次实验以Lab01-03.exe为例。 一、实验环境及工具。 Vmware虚拟机:win10(win7)、kali 主要工具:Apatedns、Inetsim 二、工具的安装下载 1、Apatedns:需安装至windows虚拟机客户端(win10,win7均可) 下载地址:http

妙蛙种子吃了都会妙妙秒的妙脆角的博客 7934

Linux 的 base64 命令

base64是 Linux 系统中用于 Base64 编码和解码的标准命令工具。Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式,常用于在文本环境中传输或存储二进制数据。

IMPYLH的博客 422

C#联合Halcon机器视觉框架源码—升级版

相较于之前的NxtVision,本软件代码架构更加合理,且新增。对源码有需求的,订阅本专栏后,私信我领取。、原来的vb脚本改为。

Z's Palace 1415

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

base64编解码

base64编码、解码

犇叔的博客 2万+

Python分布式爬虫深度实战:反爬破解+数据清洗+性能优化全流程

分布式爬虫的核心是“调度中心化+执行分布式”,Scrapy-Redis是最易落地的框架,无需从零写调度逻辑;反爬破解要分级应对:基础反爬靠随机UA/限流,进阶反爬靠代理池,高级反爬靠第三方验证码API;数据清洗的关键是“批量处理+标准化”,避免内存溢出,核心字段去重和异常值过滤是必做步骤;性能优化不是单纯加节点,而是从架构(分片)、代码(批量写入)、服务器(索引/网络)三层协同优化,才能实现效率翻倍。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1200

Linux base64 --用base64编解码

用途说明 base64是一种常用的简单的编解码方式。以下内容摘自维基百科。   维基百科 Base64 写道 在MIME格式的电子邮件中,base64可以用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号「+」,斜杠「/」,一共64个字 符,等号「=」用来作为后缀用途。

老莫小小朋友 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Linux系统之base64命令详解

base64 是一个在类 Unix 系统(如 Linux 和 macOS)中使用的命令行工具,用于对二进制数据进行 Base64 编码或解码。Base64 编码是一种将二进制数据转换为 ASCII 字符串格式的方法,常用于在文本协议(如电子邮件)中传输二进制数据。

weixin_56303229的博客 2446

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

解码base64_linux C++ Base64编解码

Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢? 在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上...

weixin_36219842的博客 397

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

linux c base64 编码,支持中文的BASE64 编解码

(原创)昨天为了测试我的终端,自己写了个模拟服务器,用到BASE64 编解码,已用了GoAhead的代码,发现不支持中文,自己改造一下,解决了问题。现在把代码发上来给大家借鉴。/** base64.c -- Base64 Mime encoding** Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.** Se...

weixin_35625676的博客 603

C++ base64编解码

C++ base64编解码

yuchunhai321的博客 259

OverTheWire Bandit实战场景中使用的使用的 Linux 命令

摘要: 本文总结了OverTheWire Bandit挑战中常用的Linux命令及其典型用法,包括cat(查看文件内容)、ls(列出目录)、file(识别文件类型)、find(递归搜索文件)、grep(文本搜索)、sort(排序)、strings(提取二进制字符串)和base64(编解码)。每个命令均列出核心选项及Bandit关卡中的实战示例,如find查找特定大小文件、grep过滤关键词等,适用于CTF解题和日常系统管理。

xf3401837266的博客 1241

【嵌入式Linux】进程间通信使用Base64编解码进行序列化和反序列化,在进程之间传递复杂的数据结构体

在嵌入式Linux系统中,进程间通信(IPC)是实现多进程协作的重要技术手段。为了在进程之间传递复杂的数据结构,我们通常需要使用序列化和反序列化技术。本文将介绍如何使用Base64编码进行数据的序列化和反序列化,以实现进程间的高效通信。

科技改变人类,技术成就未来 1506

base64 乱码_linux C++ Base64编解码

Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢? 在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上...

weixin_39771775的博客 243
上一篇: 我使用过的Linux命令之kill - 终止进程/发送信号
下一篇: 我使用过的Linux命令之w - 显示谁登录了系统及在做什么
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值