Base64编码-算法特别的理解

Base64

在DES加密和AES加密的过程中,加密的编码会出现负数,在ascii码表中找不到对应的字符,就会出现乱码。为了解决乱码的问题,一般结合base64使用

所谓Base64,即是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”

Base58是Bitcoin(比特币)中使用的一种编码方式,主要用于产生Bitcoin的钱包地址 相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"i",以及"+"和"/"符号

Base64特点:

  • Base64是网络上最常见的用于传输8bit字节码的可读性编码算法之一
  • 可读性编码算法不是为了保护数据的安全性,而是为了可读性
  • 可读性编码不改变信息内容,只改变信息内容的表现形式

Base64算法原理:

  1. 将原始数据每三个字节作为一组,每个字节是8个bit,所以一共是 24 个 bit
  2. 将 24 个 bit 分为四组,每组 6 个 bit
  3. 在每组前面加补 00,将其补全成四组8个bit
  4. 根据Base64码表得到扩展后每个字节的对应符号

base64算法原理,特别的理解

抽象的理解就是,对原始字符串削皮,削成两层,得到最内层的东西,再平均分成4组,最后再把削的两层皮贴回去,变成原来的模样

1.在整个原始字符串中每次拿出一组进行编译,一组三个字节

2.第一次削去英文字母的形式,露出ascii码形式

3.第二次削去ascii码的形式,露出二进制形式

4.再将这一组所有的二进制,平均分4小组,即每组6位

 5.最后针对每小组的6位编码,逆着原来的步骤,一步一步把皮贴回去,

就是将二进制形式变成十进制形式,再将十进制对照base64表,变成英文字母的形式

 上面的表格中是对Man进行编码,Man正好是3组8位的字符串

对于M,首先ascii编码是77,再将77转换成二进制形式,之后以6个字节为一组,分成4组

每组形成的编码对照base64对照表,写出编码后的字符串

 

有时我们会在Base64字符末尾会看到=,有时1个,有时2个

通过上面的我们知道了Base64编码过程是3个字符一组的进行,如果原文长度不是3的倍数怎么办呢? 例如我们的原文为Ma,它不够3个,那么只能在编码后的字符串中补=了。缺一个字符补一个,缺两个补两个即可,所以有时候你会看见base64字符串结尾有1个或者2个=

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure资源命名和标记决策指南

参考 azure创建虚拟机在虚拟机中选择编辑标签,并添加标记,点击应用 3.到主页中转到所有资源 4. 添加筛选器并应用 5.查看结果,筛选根据给服务器定义的标签筛选出结果。 参考链接: https://learn.microsoft.com/zh-cn/azure/cloud-adoption…

在Java中操作Redis(详细-->从环境配置到代码实现)

在Java中操作Redis 文章目录 在Java中操作Redis1、介绍2、Jedis3、Spring Data Redis3.1、对String的操作3.2、对哈希类型数据的操作3.3、对list的操作3.4、对set类型的操作3.5、对 ZSet类型的数据(有序集合)3.6、通用类型的操作 1、介绍 Redis 的Java客…

基于Echarts的数据可视化大屏

本项目学习于b站up主(视频链接) up主分享的资料,gitee仓库: 其中有笔记,笔记链接 项目总结 项目主要分为前端页面的布局和Echarts图表的嵌入,页面主要就是css较为繁琐,图表毕竟官网有模板&…

数组slice、splice字符串substr、split

一、定义 这篇文章主要对数组操作的两种方法进行介绍和使用,包括:slice、splice。对字符串操作的两种方法进行介绍和使用,包括:substr、split (一)、数组 slice:可以操作的数据类型有:数组字符串 splice:数组 操作数组…

计算机网络-物理层(一)物理层的概念与传输媒体

计算机网络-物理层(一)物理层的概念与传输媒体 物理层相关概念 物理层的作用用来解决在各种传输媒体上传输比特0和1的问题,进而为数据链路层提供透明(看不见)传输比特流的服务物理层为数据链路层屏蔽了各种传输媒体的差异,使数据…

最新Kali Linux安装教程:从零开始打造网络安全之旅

Kali Linux,全称为Kali Linux Distribution,是一个操作系统(2013-03-13诞生),是一款基于Debian的Linux发行版,基于包含了约600个安全工具,省去了繁琐的安装、编译、配置、更新步骤,为所有工具运行提供了一个…

[低端局][cx32L003] 移植U8G2

文章目录 一、简介(1)U8g2(2)U8x8 二、配置要求三、移植步骤(1)文件准备和添加(2)实现回调接口(I2C的读写函数)①软件I2C②硬件I2C (3)功能裁剪① u8g2_d_set…

Python Selenium 设置带账号密码的socks5代理,启动浏览器

selenium添加带有账密的socks5代理 我们都知道在使用selenium开发爬虫的时候不可避免的会使用socks5高匿名代理。一般情况下我们使用方法如下(开发语言为python): from selenium import webdriver chrome_options webdriver.ChromeOptions() chrome_options.add_…

Java并发之ReentrantLock

AQS AQS(AbstractQueuedSynchronizer):抽象队列同步器,是一种用来构建锁和同步器的框架。在是JUC下一个重要的并发类,例如:ReentrantLock、Semaphore、CountDownLatch、LimitLatch等并发都是由AQS衍生出来…

React Native Expo项目,复制文本到剪切板

装包: npx expo install expo-clipboard import * as Clipboard from expo-clipboardconst handleCopy async (text) > {await Clipboard.setStringAsync(text)Toast.show(复制成功, {duration: 3000,position: Toast.positions.CENTER,})} 参考链接&#xff1a…

3.文件目录

第四章 文件管理 3.文件目录 ​   对于D盘这个根目录来说它对应的目录文件就是图中的样子,其实就是用一个所谓的目录表来表示这个目录下面存放了哪些东西。在D盘中的每一个文件,每一个文件夹都会对应这个目录表中的一个表项,所以其实这些一…

Autoware感知02—欧氏聚类(lidar_euclidean_cluster_detect)源码解析

文章目录 引言一、点云回调函数:二、预处理(1)裁剪距离雷达过于近的点云,消除车身的影响(2)点云降采样(体素滤波,默认也是不需要的)(3)裁剪雷达高…

【概念篇】文件概述

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! 文件概述 1,文件的概念 狭义上的文件是计算机系统中用于存储和组织数据的一种数据存…

React源码解析18(5)------ 实现函数组件【修改beginWork和completeWork】

摘要 经过之前的几篇文章,我们实现了基本的jsx,在页面渲染的过程。但是如果是通过函数组件写出来的组件,还是不能渲染到页面上的。 所以这一篇,主要是对之前写得方法进行修改,从而能够显示函数组件,所以现…

【深度学习】NLP中的对抗训练

在NLP中,对抗训练往往都是针对嵌入层(包括词嵌入,位置嵌入,segment嵌入等等)开展的,思想很简单,即针对嵌入层添加干扰,从而提高模型的鲁棒性和泛化能力,下面结合具体代码…

Spark 学习记录

基础 SparkContext是什么?有什么作用? https://blog.csdn.net/Shockang/article/details/118344357 SparkContext 是什么? SparkContext 是通往 Spark 集群的唯一入口,可以用来在 Spark 集群中创建 RDDs 、累加和广播变量( Br…

【数据库基础】Mysql下载安装及配置

下载 下载地址:https://downloads.mysql.com/archives/community/ 当前最新版本为 8.0版本,可以在Product Version中选择指定版本,在Operating System中选择安装平台,如下 安装 MySQL安装文件分两种 .msi和.zip [外链图片转存失…

C++11时间日期库chrono的使用

chrono是C11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。 时钟与时间点 chrono中用time_point模板类表示时间点,其支持基本算术操作;不同时钟clock分别返回其对应…

Docker中部署Nginx

1.Nginx部署需求 2.操作教程 3.实际步骤 把配置粘过来。

Cookie、Session、Token的区别

有人或许还停留在它们只是验证身份信息的机制,但是它们之间的关系你真的弄懂了么? 发展史: Coolie: Netscape Communications 公司引入了 Cookie 概念,作为在客户端存储状态信息的一种方法。初始目的是为了解决 HTTP 的无状态性…