这一边有三笔资料
U2FsdGVkX19FJsgVyam+Gh2EwmGs4BEJjJJsWxCXHWw84gp3uHvozWsHY8gfAx0CVG9kYXkgaXMgYSBnb29kIERheQ==046a484a529ecfc7693753ee65802b5cfcafd548252d0e5f1bca845ad2208b91这三个东西看起来都是乱码,但所代表含意完全不一样
这边会跟大家分享这三个东西特性和差异性
此文同步发布 Blog [浅谈] 编码(encoding) vs 加解密 vs 杂凑(Hash)
前言:
会想分享这篇文章是因为蛮多人把
编码(encoding)加解密杂凑(Hash)这三个东西搞混,尤其是把编码当作加密....这是非常危险的事情.
编码!= 加密 两个是完全不一样的东西编码!= 加密 两个是完全不一样的东西编码!= 加密 两个是完全不一样的东西
很重要所以要说三次XD!
编码
说明:
这边用Base64
编码来介绍,我们可以看到下图资料转换是双向的.
Hello Daniel => SGVsbG8gRGFuaWVs
如果我们想要把SGVsbG8gRGFuaWVs
变回 Hello Daniel
只需进行Base64
解码即可
编码是将原本的资料经过一个运算转换成另一组资料,如果要还原成原本资料解码
用途:
在网路传输会使用到编码主要是资料在传输时有些特殊字元,有特殊用途(ex:Http 传参数 &....)
这时就可使用编码将资料转换成不会冲突到字串.
如果想要了解 Base64 原理和演算法的话可以看我另一篇【深入浅出】Base编码 (Base64为例子)
加解密
说明:
这边以AES
来介绍,我们可以看到下图资料转换是双向,但会透过一个Key来做转换(这边是和编码最大的差别)
要还原成原始资料我们只能透过一样的Key才可以达成,就像一个宝相只有唯一一把钥匙可以打开一样.
这边补充一个简单加密法(凯萨算法),他是使用字元位移的数字来当作Key
如果位移数量是1 ABCD => BCDE
如图
用途:
加密可以确保资料的安全性(只有相同的Key才可还原成原本资料)很适合用在机密资料且须要还原使用
杂凑(Hash)
说明:
这里用Sha256
来当作範例
Hash有几个特点
不管资料量多大经过SHA256运算字串长度都是一样的SHA256
的原因是运算完的资料大小一定是 256 bit
她是一个不可逆的算法所以我们可以看到箭头是单向.相同的值用SHA运算过后值都是一样的一定会有小伙伴好奇,运算完都是固定长度 那会不会出现一个情况,原始资料不一样但算完Hash
结果是一样的
会 这个我们称之为杂凑碰撞 这个机率很小
用途:
一般我们可以把使用者密码经Hash
运算存入资料库中,当作使用唯一识别码(像指纹)下次使用者登入用运一样的Hash
算法 再将值拿来比较辨识使用者合法性.
小结:
对于这边有一个简单的比较表格
编码(encoding)加解密杂凑(Hash)加解密和编码最常被大家误会搞错地方是以为使用Base64
编码就很安全(但有心人事取得你的资料只要知道你使用编码就可以还原成原始资料)
如果要确保资料隐密性时可以使用加解密而不是编码
所以别再把Base64
编码当作加密工具来使用.
这是很危险低