请选择 进入手机版 | 继续访问电脑版
发帖
开启辅助访问
 找回密码
 立即注册
取消
搜索
热搜:
活动 交友 discuz
分享到

分不清加密、压缩、编码?看完这篇就够了哦!

#技术分享#时间:2018-10-15 阅读:909 回复:0
前言

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



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


回复
使用道具 举报
快速回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服电话
173-6185-1240
发布 快速回复 返回顶部 返回列表