算法~base64算法理解

这篇具有很好参考价值的文章主要介绍了算法~base64算法理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

base64

Base64 是一种用于将二进制数据编码成 ASCII 字符的编码方式。它主要用于在文字环境中传输或存储二进制数据,如在电子邮件、XML 文件、URL 参数等。Base64 编码不是一种加密算法,而是一种编码方式,其主要作用是将二进制数据转换为文本数据,以便更容易在文本协议中处理。

Base64 编码使用 64 个不同的字符来表示二进制数据。这些字符包括大小写字母 A-Z 和 a-z、数字 0-9,以及两个额外的字符通常是 "+" 和 "/"。有时候,为了适应不同的环境,可能还会使用额外的字符,如 "=" 用于填充。

编码的过程如下:

  1. 将待编码的数据划分为 3 个字节的块。
  2. 将每个字节块转换为一个 24 位的二进制数。
  3. 将这个 24 位的二进制数分为四个 6 位的块。
  4. 将每个 6 位的块转换为对应的 Base64 字符。
  5. 如果原始数据的长度不是3的倍数,可能会有一些填充字符(通常是 "=")。

解码的过程是编码的逆过程,将 Base64 字符转换回原始的二进制数据。

Base64 的主要优点是它能够将二进制数据以文本形式呈现,且编码后的数据长度通常比原始数据小,这对于在文本协议中传输二进制数据是很有用的。然而,它并不是为了安全而设计的,因此不应用于对数据进行加密。

url base64

UrlBase64 是 Base64 编码的一种变体,主要用于在 URL 中安全地传输二进制数据。它与标准的 Base64 编码相比,有一些微小的差异,以确保编码后的字符在 URL 中不会引起问题。

UrlBase64 主要有以下两个特点:

  1. 字符集不同: 在标准的 Base64 编码中,使用字符 "+", "/",而这两个字符在 URL 中有特殊的含义,可能会引起歧义或导致 URL 解析错误。为了解决这个问题,UrlBase64 将字符 "+" 替换为 "-", 将 "/" 替换为 "_"。

  2. 去掉填充字符: 标准的 Base64 编码在最后可能会使用一个或两个 "=" 字符进行填充,以使编码后的字符串长度是4的倍数。但是在 URL 中,这些填充字符可能引起问题,因此 UrlBase64 通常去掉填充字符,直接使用编码后的字符串。

总体而言,UrlBase64 是为了适应 URL 中的特殊需求而修改的 Base64 编码。在处理需要在 URL 中传递的二进制数据时,使用 UrlBase64 可以确保编码后的字符串在 URL 中是安全且可靠的。在使用 UrlBase64 解码时,需要在解码之前将 "_" 替换为 "/",将 "-" 替换为 "+",并根据需要添加填充字符。

算法演变

计算字符串在转成 Base64 编码后的长度可以通过以下简单的公式来估算:

  1. 计算原始字符串的字节数(每个字符通常占用一个字节,但是对于 Unicode 字符,可能会占用多个字节)。

  2. 计算 Base64 编码后的长度:
    算法~base64算法理解

    这个公式的解释如下:

    • 每个 Base64 字符表示 6 个比特(2^6 = 64)。
    • 每组 3 个字节的数据被编码成 4 个 Base64 字符。
    • 如果原始字节数不能被 3 整除,可能会有填充字符 "="。

以下是一个简单的 Python 示例,演示如何计算字符串经过 Base64 编码后的长度:

  • 使用上面公式计算长度

base64最小长度是4位,每个base64的长度都是4的倍数,不够长度结尾补=符号
公式计算base64实际的长度,整除向上取整,例如18/6=2,28/6=3,38/6=4,48/6=6。

原字符 每6bit一组 base64编码
a 1*8/6=2 YQ==
ab 2*8/6=3 YWI=
abc 3*8/6=4 YWJj
abcd 4*8/6=6 YWJjZA==
abcde 5*8/6=7[] YWJjZGU=

pyhon实现

import base64

def base64_encoded_length(input_string):
    # 计算原始字节数
    original_bytes = len(input_string.encode('utf-8'))
    
    # 计算 Base64 编码后的长度
    base64_length = (original_bytes * 8 + 5) // 6
    
    # 考虑填充字符
    if original_bytes % 3 != 0:
        base64_length += 4 - (original_bytes % 3) * 2
    
    return base64_length

# 示例
original_string = "Hello, World!"
length_before = len(original_string)
length_after = base64_encoded_length(original_string)

print(f"原始字符串长度:{length_before}")
print(f"Base64 编码后长度:{length_after}")

请注意,这只是一个估算。实际的编码长度可能会受到编码实现细节的影响,例如是否包含换行符等。文章来源地址https://www.toymoban.com/news/detail-746233.html

到了这里,关于算法~base64算法理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python基础-base64编码理解

    目录 1、base64是什么 2、base64有什么用 3、base64如何用 4、理解base64 5、扩展 1、base64是什么 base64 就是包括字母a-z,A-Z,数字0-9,符号“+”,“/”一共64个字符的字符集; 还有一个‘=’ 字符,占位补充;         -- 这样看实际是65个字符了,‘=’只是占位  任何数据都可以转

    2024年01月20日
    浏览(44)
  • 安卓base64与其他语言base64算法还原出来差异问题???

    今天逆向某app时,发现了最后一步base64编码后后几位不一致。 之前有遇到空格及换行等问题,eg : 在在线工具生成对比后,确实后几位有出入。 回看了代码base64就是调用的标准算法,且也没更换码表。 众所周知,base64是以6位进行便宜,而正常是8个bit位,这样就会缺两位进行

    2024年02月12日
    浏览(63)
  • base4解密(Base64加密算法)

    base64解密解码转换说明: 1、Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用‘=’,因此编码后输出的文本末尾可能会出现1或2个‘=’。 2、为了保

    2024年02月16日
    浏览(113)
  • C/C++学习 -- Base64算法

    Base64算法概述 Base64是一种用于将二进制数据表示为ASCII字符集中的可打印字符的编码方法。它由64个不同的字符组成,通常包括26个大写字母、26个小写字母、10个数字以及两个特殊字符(通常是\\\"+\\\"和\\\"/\\\")。Base64编码的目的是使数据变得不可读,而不是加密数据。它经常用于电

    2024年02月01日
    浏览(47)
  • 20.1 OpenSSL 字符BASE64压缩算法

    OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持 SSL/TLS 、 SSH 、 S/MIME 、 PKCS 等常见的加密协议和标准。 OpenSSL 的功能非常强大,可以用于

    2024年02月08日
    浏览(36)
  • BASE64算法原理解析之C#实现

    1. BASE64算法原理: base64编码规则      A.采用64个基本的ASCII码字符对数据进行重新编码     B.将要编码字符串拆分成字节数组,以 3个字节为一组 。 按顺序排列24 位数据 ,    C.把24位数据分成4组,每组6位,每组最高位前补两个0凑足一个字节,         3字节为一组的数据重新

    2024年02月15日
    浏览(45)
  • 利用Base64加密算法将数据加密解密

    Base64准确来说并不像是一种加密算法,而更像是一种编码标准。 我们知道现在最为流行的编码标准就是ASCLL,它用八个二进制位(一个char的大小)表示了127个字符,任何二进制序列都可以用这127个字符表示出来。 而Base64则是用6个二进制位表示了64个字符,也就是说,任何的

    2024年04月09日
    浏览(95)
  • 国密算法签名与加密结果字节长度变化及Hex与Base64编码长度变化

    有很多应用场景,数据通常经过加密和编码后传输,有时我们需要知道经过处理后的数据的长度,此时就需要分析各种算法的数据处理策略,及结果变化。下边主要介绍国密SM2算法签名与加密结果字节长度变化及Hex与Base64编码长度变化。 1,ASCII码:一个英文字母(不分大小写

    2024年02月02日
    浏览(47)
  • 【C语言】C语言编程实战:Base64编解码算法从理论到实现(附完整代码)

    🧑 作者简介 :阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍 :分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服

    2024年03月13日
    浏览(39)
  • C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求

    在需要使用配置文件的工控软件中,往往需要在配置文件和数据库中对一些数据加密,即对一串数据进行加密算法后输出复杂符号和字符的形式,让非相关人员无法识别原有数据,从而对数据或数据库进行相应的保护,这往往也是公司安全部门的基本要求。 网上写加密算法的

    2024年02月03日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包