算法系列(十一)BASE64算法实现和使用说明

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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

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

当原数据长度不是3的整数倍时, 如果最后剩下一个输入数据,在编码结果后加2个“=”;如果最后剩下两个输入数据,编码结果后加1个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证数据还原的正确性。

例子

举例来说,一段引用自托马斯·霍布斯利维坦》的文句:

Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.

经过Base64编码之后变成:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
  • 编码“Man”
文本 M a n
ASCII编码 77 97 110
二进制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
邮箱系统原理——邮件的组织结构 RFC822邮件内容 在RFC822文档中定义,邮件内容包括两个主要的组成部分:邮件头邮件体 邮件头部包括以下内容: Return-Path该字段代表邮件的回复地址 Received该字段格式为Received from A by B from C(A为发送方,B为接收方,C为收件人的邮件地址)是在SMTP服务器传递过程中加上的,内容由接收邮件的SMTP服务器填写,常常被用来追踪邮件传输 阅读详情

相关推荐

Base64编解码及C++代码实现

Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。例如字符串 mickey0380 对应的Base64为 bWlja2V5MDM4MA==。其中那个 = 比较特殊,是填充符。值得注意的是Base64不是加密算法,其仅仅是一种编码方式,算法也是公开的,所以不能依赖它进行加密。

mickey2007的博客 6288

rfc2045.pdf

RFC官网(http://www.rfc-editor.org)下载的关于Base64编码的RFC文档,编号2045。

Python实现BASE64 算法

本文详细介绍了 BASE64 算法的原理、Python 实现及其实际应用场景。通过对 BASE64 编码解码过程的解析,以及面向对象的代码实现,读者可以更好地理解 BASE64 的工作机制及其在实际场景中的应用。BASE64 编码作为一种简洁而实用的编码方式,广泛用于各种网络传输存储场景,是计算机科学中的基础知识之一。

闲人编程的博客 1769

一篇文章彻底弄懂Base64编码原理

前半部分为转载,后半部分为自己补充 ----------------------------转载部分start----------------------------- Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。 在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)...

悟鸣的技术博客 8524

Base64编码出现换行符

概述 Base64是一种字符串编码格式,Base64采用A-Z a-z 0-9 “+“ “/“这一共64个字符来编码原始字符(还有垫字符“=“)。一个字符本身是1个字节,也就是8位,而Base64编码后的一个字符只能表示能表示6位的信息。也就是原始字符串中3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME传输需求,在传输过程中都是用ASCII支持的可见字符。Base64是基...

qq_24462991的博客 1万+

RFC 2045 信体格式说明书(一)

多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))由两部分组成,信头信体。信体格式说明书即(RFC 2045),链接:http://www.faqs.org/rfcs/rfc2045.html。   本备忘录的状态   本文档讲述了一种Internet团体的Intern...

chimeiyan8610的博客 734

RFC2045译文(1)

Network Working Group                                          N. FreedRequest for Comments: 2045                                     InnosoftObsoletes: 1521, 1522, 1590                              

prettynacl的专栏 5393

python 实现base64加密base64解密算法

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2 的 6 次方等于 64,所以每 6 个比特为一个单元,对应某个可打印字符。三个字节有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可表示成 4 个可打印字符。它可用来作为电子邮件的传输编码。在 Base64 中的可打印字符包括字母 A-Z、a-z、数字 0-9、加号 + 斜杠 /,在编码后的数据最后,如果剩下一个、两个或三个字符,则以等号 = 填充,这样可使编码长度成为 4 的倍数。

luthane的博客 2332

UNIAPP微信小程序中使用Base64编解码原理分析算法实现

为何要加上UNIAPP及微信小程序,可能是想让检索的翻围更广把。😇 Base64的JS原生编解码在uni的JS引擎中并不能直接使用,因此需要手写一个原生的Base64编解码器。正好项目中遇到此问题,需要通过URLLink进行小程序跳转并携带Base64参数进行数据传递,从而更好的在跳转后的初始化中进行鉴权等其他操作。特此将Base64的相关内容进行分析。需要具体实现算法的直接跳到最后即可。

YUE 5882

什么是Base64,以及在Java使用Base64编码

Base64是一种用64个字符(0-9,a-z,A-Z,+,/)来表示二进制数据的方法,是基于64个可打印字符进行编码的。Base是一种索引编码,每6个bit位作为一个单元,对应一个字符,为了保证所输出的编码为可读字符,Base64制定了一个编码表,以便进行统一转换,编码表的大小为2^6=64,这也是Base64名称的由来。

CSDN_YYD_997的博客 4441

AESBase64加密算法结合使用

    两种加密算法的结合使用是为了更加安全,使得真正的密码只用用户自己知道,并且外人河南破解。废话不多说,我这里直接写了AES加密算法BASE64加密算法的工具类,可以直接调用 一. BASE64加密工具类 package com.AES; import sun.misc.BASE64Decoder; import sun.misc.BASE64Enco...

飞翔的宇宙 4717

使用BASE64实现编码解码

BASE64编码是一种将二进制数据转换为ASCII字符的编码方式,常用于在网络传输中传递、保存二进制数据。BASE64编码可以将任意的二进制数据转换为文本字符串形式,由于其特殊的编码方式,不易被人直接识别,也比较难以被篡改。 Java语言中提供了BASE64编码解码的支持,可以很方便地进行编码解码操作。使用BASE64编码/解码非常简单,只需要调用相应的编码器或解码器即可。在进行BASE64编码解码时,需要注意数据类型的转换,以及一些特殊字符的处理。 下面我们来介绍如何在Java中进行BASE64编码

心态的博客 4620

加密算法(二):Base64、MD5、SHA系列 、DES HMAC

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。

总结复盘,才能不迷失自己! 1322

【Python系列Base64 编码:使用`base64`模块

Base64 编码是一种基于 64 个可打印字符来表示数据的编码方式。它将二进制数据转换为 ASCII 字符串,使得数据可以在不支持二进制数据的系统间传输。Base64 编码使用一个固定大小的字符集,通常包括大写字母 A-Z、小写字母 a-z、数字 0-9 以及"+“”/“两个符号。为了确保编码后的字符串长度是 3 的倍数,如果必要,会在编码的末尾添加一个或两个”="字符作为填充。

CSDN站内信: https://i.csdn.net/#/msg/chat/qyj19920704 1万+

RSA算法BASE64编码使用实例

/** * RSA算法定义 */ public static final String KEY_ALGORITHM = "RSA"; /** * 生成密钥对 * * @return 长度为2的String数组,分别为BASE64编码的公钥密钥 * @throws Exception */ public static String[] generateKeyPa...

Johnathan的博客 1381

Base64算法详解实现

 什么是Base64?    Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。 为什么要使用Base64?在设计这个编码的时候,我想设计人员最主要考虑了3个问题: 1.是否加密? 2.加密算法复杂程度效率 3.如何处理传输?      加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式

adolfsabin的专栏 650

什么是Base64算法

A:为什么在进行Http传输的时候,需要把Byte数组进行Base64编码呢? B:这很简单呀,因为Http协议是文本协议,不同于二进制协议(如Thrift)那样直接进行二进制传输。 A:那么,直接把Byte数组转换成String不就行了吗?类似newString(bytes)这样。为什么非要用Base64呢? B:首先,Base64是一种编码算法。为什么叫左Base64呢?因为这种算法只支...

HelloWorld搬运工 2万+

Base64算法

何为Base64算法 Base64是一种基于64个字符的编码算法,根据RFC2045的定义:“Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别”。经过Base64编码后的数据会比原始数据略长,为原来的4/3倍。经Base64编码后的字符串的字符数是以4为单位的整数倍。 Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。 Base64是网络上最常见的用于传输...

曰业而安的博客 6255

VS2010 C++项目实战:RC4Base64加解密算法实现

RC4是一种流密码,由Ron Rivest在1987年开发,广泛用于SSLWEP协议中。它通过一个长度可变的密钥来初始化一个256字节的状态向量,然后产生伪随机比特流与明文异或以生成密文。RC4因其简单、高效而著称,尽管存在安全性问题,但在某些场合仍然被使用Base64编码是一种用64个字符表示任意二进制数据的方法。它主要用于在处理文本数据时,保证数据的完整性可读性。

weixin_42372837的博客 787
上一篇: Activity的生命周期和启动模式详解
下一篇: Android不依赖Activity的全局悬浮窗实现
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值