base64为什么不是加密?


3楼猫 发布时间:2024-07-30 20:37:04 作者:山东大学招生处 Language

一聊到加密,大家也许会马上联想到凯撒密码,base64,md5等名词,但是事实上base64和md5都不是加密的手段,只不过被误认为是一种加密,所以今天通过尽量通俗易懂的解释和例子来说明md5、base64、甚至是霍夫曼编码都不是加密,以及什么是加密。

今天的文章分为三个部分,分别是加密的误区,对称加密和公钥加密

加密的误区

加密的一个形象化定义是,使用一个保密的密钥,对一段信息进行处理,使其变得没有规则,无法在没有密钥的情况下还原。下面我们利用这个简单的定义来解释加密的误区。

首先是一系列编码方式,比如ASCII码,base64算法和霍夫曼编码:

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。

base64为什么不是加密?-第0张

Base64索引表

根据我们的通俗化定义,Base64并不是一种加密方式,我们的明文在使用Base64编码后,仍通过公开的索引表直接还原为明文。因此,Base64只能作为一种数据的存储格式,任何人都可以对其进行解码。

同理,无论是霍夫曼码还是其他编码方式(汉明码,rs码等),都不是加密算法。

解释完了编码,下面聊一下hash为什么不是加密算法。首先同样的,我们引入hash的形象化定义:哈希(Hash)的目的是将目标文本转换成具有相同长度的、不可逆的无规律字符串,重点在于不可逆二字,例如,设我们有两段文本:“Microsoft”和“Google”。两者使用某种哈希算法得到的结果分别为:“140864078AECA1C7C35B4BEB33C53C34”和“8B36E9207C24C76E6719268E49201D94”,任何人(包括哈希的计算者)都不能通过任何办法对这两段无规则字符串求逆得到原始值。所以显然,hash算法例如mad5都不能作为加密算法,因为加密之后没法解密。

base64为什么不是加密?-第1张

最后一个问题,凯撒密码是加密吗?是加密,凯撒密码属于古典密码学,即其符合加密的一般化定义(具有密钥,加密,解密),但是其加密手法一定程度上已经被现代密码学淘汰(当然移位和置换的思想被对称密码学继承)。

什么是对称密码

解释完了加密的误区,下面来聊一聊现代密码学中的对称密码的定义和理解,所谓对称,即使用相同的密钥进行消息的加密与解密。因为这个特性,我们也称这个密钥为「共享密钥(Shared Secret Key)」,示意图如下:

base64为什么不是加密?-第2张

一个通俗易懂的例子是,加密算法是一把门锁,那么对称密钥就是钥匙,当我们出远门时,会用钥匙🔑把门锁锁上好几圈,这就是加密的过程,当我们旅游回家以后,再用相同的钥匙开锁,这就是解密的过程,整个过程都在使用同一个钥匙,就是形象化的“对称”。同时,对称加密和对称解密在结构上很大程度上是类似的,所以也称为对称加密。

base64为什么不是加密?-第3张

DES流程

我们来简单看一下DES(非常简单的对称加密算法)的流程,首先进行IP置换(初始置换),其实就是小朋友对号入座,顺序参考下图,一号座坐58号小朋友,二号座坐50号,以此类推,打散小朋友的顺序。

base64为什么不是加密?-第3张

置换表

然后进行正式的加密,DES加密算法共有重复的16个轮次,在每个轮次中,右半部分R0会作为下一轮次的左半部分L1的输入。其次,R0会补位到48位和本轮次生成的48位密钥K0输入到F轮函数中去。F函数的输出结果为32位,结果F(R0,K0)会和L0进行异或运算作为下一轮次右半部分R1的输入。以此类推,重复16轮运算。

base64为什么不是加密?-第3张

这部分通俗的解释是,把要加密的信息分成两半,右边直接输出到下一轮作为下一轮左边的输入,左边和对称密钥一起输入到一个加密函数F里(也是类似于上面IP置换的置换),得到的结果与右边信息异或后作为下一轮的右边。

base64为什么不是加密?-第3张

加密函数F的解释

讲完DES的加密,解密就很简单了,在加密中,密钥的作用是与左半边逐位进行异或(a和b异或时,如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0),由于异或具有可逆的性质(即a与b异或后,再异或b可以得到a),所以DES解密算法是DES加密算法的逆,直接倒着运行一遍就能得到明文。

公钥加密(非对称加密)

讲完了对称密码,再来讲一下公钥密码,如何理解呢,公钥加密体系中包括公钥和私钥,可以参考下图:

base64为什么不是加密?-第3张

每个人都有锁A的钥匙,给你寄信时,只需要打开你的邮箱就可以投递,但是一旦投递,信就会掉到邮箱底部,你无法对其进行解密,只有邮箱主人利用自己的私钥(也就是锁B的钥匙)可以打开底部的锁,拿出底部的信。

base64为什么不是加密?-第3张

那么这个天才的想法该怎么实现呢?我们引入困难问题这个概念,这个概念在我之前的文章NP和P的关系,即正着算很简单,但是反着算很难,比如你有两个素数17和33,他们的乘积是561,但看561想把它分解回去,只能从2开始除,全部试一遍,当两个素数很大的时候,计算乘积的分解是NP难的,下面我们解释如何利用这个因子分解问题来构建最经典的公钥加密算法RSA。

小黑盒没法打公式,我就在自己电脑里写好过程截图吧,RSA加密过程用最简单的话说是这样的:

base64为什么不是加密?-第3张

RSA 算法的安全性基于大整数的质因数分解的困难性. 由于目前没有能在多项式时间内对整数作质因数分解的算法, 因此无法在可行的时间内把 n 分解成 p 和 q 的乘积,所以在不知道私钥的情况进行解密。

公钥加密的构建都是这样的,选择一个数学困难问题作为单项陷门进行加密算法设计。

文章的最后总结一下,数据加密在如今这个信息化的时代尤为重要,所以必须分清楚什么是加密,避免在编程或信息传递时使用错误的方式进行加密从而导致信息泄露。


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com