如何区分加密、压缩、编码?

您所在的位置:网站首页 编码压缩算法 如何区分加密、压缩、编码?

如何区分加密、压缩、编码?

2024-06-15 20:45| 来源: 网络整理| 查看: 265

原文标题:How to distinguish between encryption, compression, and encoding? 原文作者: M157q 译文出自:云子可信官方论坛 本文永久链接:https://bbs.cloudtrust.com.cn/thread-349-1-1.html 译者:云子可信汉化组

在这里插入图片描述

前言

base64加密?base64压缩?base64编码?傻傻分不清? 究竟:

加密(Encrypt)压缩(Compress)编码(Encode)

到底有什么差别?明明不管是中文还是英文,这3个词长得一点都不像,那到底为什么很多人会把这3种东西都当成加密呢?主要是因为透过这3种方式处理过后的资料,都会长的跟原本不一样,一般人无法直接辨别,就觉得是被加密处理过的密文天书。然而,并不是变成人看不懂的东西就叫作「加密」。

如果误用的话,很有可能你自以为加密了的东西, 实际上并没有经过加密处理,随随便便就可以被懂其中差异的人拿到你宝贵的原始文字(最有可能的就是你的密码啦)。以下就来简单说明这3种东西各自的特性,会特别拿base64来说,希望能够端正一下视听。

加密(Encryption)

特性 首先得产生一个新的字串作为密钥,也就是一把钥匙。 在这里插入图片描述 原文与密钥作为加密演算法的输入,得到的输出即为加密过后的密文。

可以想像成,加密演算法帮你打造出你给它的这把密钥才可以开启的宝箱,帮你把原文放入宝箱后,用这把密钥上锁,上锁后的宝盒就是密文,看不到里面的东西是什么。 这种只有一把钥匙的加密演算法被称为对称式加密(Symmetric Encryption)。

问题也很明显,要是你没有保管好你的钥匙,或者你的钥匙构造太简单被人打造出一模一样的钥匙,别人就可以打开宝箱,拿到内容物。

比如说你的密钥是一个叫作"5566" 的字串,因为太好猜了,所以很容易被解密回来。 这也是为什么通常在生成密钥的时候会建议长度愈长愈好,尤其现在电脑的运算能力愈来愈强,以往透过程式一个一个暴力猜测密钥的方式,在相同单位时间内可以猜的数量变多了,密钥长度太短的话,很容易就被猜到。

因为对称式加密的安全性以及在实际应用上不够理想,于是乎,出现了安全性更高,应用范围更广的非对称式加密(Asymmetric Encryption)。

非对称式加密演算法会有两把钥匙,一把称做公钥(可以公开),另一把称做私钥(自己要藏好)。

非对称式加密除了可以做到加密以外,还可以生成数位签章,确认密文的传送方身份真的是本人,这篇不会细谈。

但这并不代表对称式加密就没有人用,两者各有各的优缺点,所以实际应用上通常都是视情况而定,常常会有两者一起使用的情形。

常见演算法

对称式:DES, 3DES, AES非对称式:RSA, DSA, ECC

结论

没有这把钥匙(无论是拿到或猜到)就无法得知真正的讯息。使用base64 的时候不需要密钥,而且任何人编码的base64讯息,任何人都可以经过base64 解码回来,所以base64 不是加密。 压缩(Compression) 特性

输入(通常是档案)经过压缩演算法后得到的输出,大小比输入来得小。 根据有无失真又区分为非破坏性(无损)压缩与破坏性(有损)压缩:

无损压缩:无失真、压缩率没办法到太高,通常用在文件档案这种不能缺少原始资料的东西。有损压缩:失真、压缩率可以比较高,通常用在图片、视讯、音讯,因为可以去掉人眼或人耳无法辨认出差异的部份,降低档案大小可以有效提升传输时的效率。

常见演算法 zip, gzip, rar, 7zip, jpg, mp3, mp4, Huffman coding

结论 没有让输出比输入小的演算法就不是压缩。经过base64 编码后得到的结果,实际上会比原档案多三分之一左右,所以base64 不是压缩。base64 使用64 个可显示的ASCII 字元来表示二进位资料。2^6 = 64,也就是一个base64单元表示6位元,即用1个ASCII字元(8 bits),表示6 bits资料,比例为4:3,也就大概多了1/3出来。

那为什么很多地方会提到在网页上用base64 表示图片可以加速?

主要是因为把图片直接以base64 字串的形式呈现在网页上的话,就不需要额外再发request 去要图片。但因为base64 会把档案变大不少,所以很多人会先把图片经过gzip 压缩后,再编码成base64 字串。

编码(Encoding)

编码牵涉的范围非常广包含了:字元编码(Character Encoding)、音讯编码(Audio Encoding)、视讯编码(Video Encoding)……等等,所以在这篇文章不会仔细讲。 其实广义上来说,上述提到的加密与压缩都算是编码的其中一种, 但这里就把上述两个排除。

特性 将原文转换成另外一种表达方式。不需要密钥,只要知道你用哪个编码演算法,任何人都可以解码。这也是单纯编码被拿来误用成加密演算法最危险的地方,因为完全不需要花时间猜密钥。

不同的编码演算法有不同的特性

错误侦测(Error Detection) 检查讯息在经过传送后是否已经改变。错误校正(Error Correction) 自动修正在经过传送后错误的内容。 方便资料进行传输 以不同的形式表示相同的资料。 例如: base64 就把二进位的资料用ASCII 来表示。

常见演算法 base64, urlencode, hamming code,

结论 有密钥:加密、输出比输入小:压缩其他:编码


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3