Base64、AES、MD5的区别与应用

2023-09-21 17:51:16

最近有个加密的需求,想起以前做过的验签、加密等内容,就一起总结一下吧,具体的技术细节就不展开了,我们只讨论核心以及如何应用

Base64

一句话解释就是用来将二进制数据进行文本化显示的编码方式

想了解base64就一定要先了解什么是字符集

字符集是由a-z,A-Z,0-9以及+/一共64个常见字符组成的,2*6=64(其实还有一个=号用于位不足时补位用,所以base64常见都是以=结尾)

通常一个字符8bit,则3个字符需要24bit;base64则使用6bit表示一个字符,24bit表示4个字符。

那么一串二进制数据或从文本获取字节数据后,无论原始字符串是什么,都可以使用base64将二进制数据用常见的字符组成一段可显示的文本。但由于每个字符bit变少,所以编码后文本会变长,可能会需要更大的带宽。

网上都在说如图片、邮件都在使用base64传输,其实还有一个场景就是加密数据的传输

比如AES加密返回的是byte[],如果使用new String()转换成字符串的话,那么发送接收双方则需要商定好编码格式,否则接收方不知道是UTF-8还是GBK可能导致数据无法还原。同时由于bit位更多加密后原始字符串存在更多不常见字符对开发不够友好。但是使用base64则不存在指定编码格式以及不常见字符问题。但注意文本变长导致的增加带宽问题

由于base64只是编码格式无法保证信息安全,不能用于加密。同样的他性能也更好

AES

aes是一种常用的对称加密算法,专门用于数据安全。AES秘钥支持128、256位不同长度,秘钥越长安全性越高但加解密速度越低

既然有对称加密那么也就有不对称加密,相对来说对称加密通常加解密速度会更快一些。适用于双方可以安全的交换保存秘钥的场景;而非对称加密则更多应用于无法安全交换秘钥的场景,比如HTTPS获取证书

MD5

也叫摘要算法,通过hash算法计算出一个固定长度的hash值,且过程不可逆。也就是无法通过MD5还原数据。现在有些黑客或者网站会通过彩虹表的方式记录大量hash后的数据反向破解原始数据。同时由于使用hash算法,就存在不同原始值的hash值一样的hash冲突问题。所以也不能通过MD5判断数据是否相等

但由于MD5的定长,以及不可逆,我们一般用于像支付报文验签,防止请求遭遇中间人攻击篡改报文此类问题

更多推荐

Python爬虫如何使用代理IP进行抓取

前言Python爬虫是一种非常强大的工具,可以用于抓取各种网站的数据。但是,在一些情况下,我们需要使用代理IP来完成数据抓取,如绕过IP限制或保护隐私信息等。本文将介绍如何使用Python爬虫抓取数据时使用代理IP,并提供示例代码和注意事项。一、什么是代理IP代理IP是一种充当客户端和服务器之间中间人的IP地址。客户端

python爬虫:同步模式和异步模式的区别

简单介绍区别Python爬虫可以使用同步模式和异步模式来执行任务,这两种模式有不同的工作方式和优缺点。下面是它们之间的主要区别:同步模式:同步模式是传统的编程方式,代码按照顺序执行,每个操作都会阻塞当前线程直到完成。当一个请求或操作需要时间较长时,程序将被阻塞,等待结果返回,这可能导致程序性能较低,尤其在大量IO密集型

浅谈C++|类的成员

一.类对象作为类成员类可以作为另一个类的成员代码:#include<iostream>usingnamespacestd;classphone{public:stringshouji;phone(stringshouji1):shouji(shouji1){cout<<"phone的构造函数调用"<<endl;}~ph

Java基于SpingBoot的地方废物回收机构管理系统,可作为毕业设计

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文章目录1.简介2.技术栈3.可行性分析四系统设计第五章系统功能实现5.1管理员功能模块六、源码获取1.简介地方废物回收机构的需求和管理上的不断提升,地

第23章_瑞萨MCU零基础入门系列教程之ADC与DSP

本教程基于韦东山百问网出的DShanMCU-RA6M5开发板进行编写,需要的同学可以在这里获取:https://item.taobao.com/item.htm?id=728461040949配套资料获取:https://renesas-docs.100ask.net瑞萨MCU零基础入门系列教程汇总:https://b

Java环境搭建&安装IDE

Java环境搭建、安装IDE文章目录Java环境搭建、安装IDE1.下载JavaJDK,配置环境变量,在命令行环境下完成helloworld程序;简介安装Step0安装包准备工作Step1下载JavaJDKStep2配置环境变量配置JAVA_HOME配置Path配置CLASSPATHStep4检验运行程序2.选择一款自

C++之浅拷贝、深拷贝、拷贝构造函数、拷贝赋值运算符、自定义的深拷贝函数应用总结(二百二十九)

简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.更多原创,欢迎关注:Android系统攻城狮1.前言本篇目的:理解C+

数据库锁及批量更新死锁处理

数据库锁锁间隙锁锁定的是一个间隙范围,而不会锁住某条记录。共享锁就是读锁,独占锁就是写锁,可以理解为读写锁,读读不互斥,读写互斥,写写互斥,共享锁(S锁)、独占锁(X锁)指的就是InnoDB上的行锁(记录锁)。意向锁是InnoDB引擎的一种特殊的表锁,在获取共享锁和独占锁之前必须拿到对应类型的意向锁。乐观锁和悲观锁更多

如何处理ChatGPT在文本生成中的语法错误和不合理性?

ChatGPT是一种强大的自然语言处理模型,但它并不是完美的,有时会产生语法错误或不合理的文本。这些问题可能会影响模型生成的内容的质量和可信度。在处理ChatGPT中的语法错误和不合理性时,有许多方法和策略可以采用,以下是一些详细的讨论:**1.数据清洗和预处理:**首先,可以通过对输入数据进行清洗和预处理来减少语法错

Ninja: Towards Transparent Tracing and Debugging on ARM【TEE的应用】

目录摘要引言贡献背景TrustZone和受信任的固件PMU和ETM相关工作x86上的透明恶意软件分析ARM上的动态分析工具基于仿真的系统硬件虚拟化裸机系统Trustzone相关的系统系统架构具体实现和评估可以看论文,这里不赘述了讨论总结作者:ZhenyuNingandFengweiZhang发布:USENIX时间:20

Hadoop NameNode执行命令工作流程

HadoopNameNode执行命令工作流程客户端API或者CLI与NameNode的交互命令数据的格式(1)预处理流程(2)创建NameNode与NameNodePrcServer流程(3)HDFSAPI以及CLI的命令到NameNode的工作执行流程(4)执行命令的参数流动客户端API或者CLI与NameNode的

热文推荐