加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

一文搞懂Web中暗藏的密码学

发布时间:2019-11-13 15:19:14 所属栏目:建站 来源:前端劝退师
导读:【线上直播】11月21日晚8点贝壳技术总监侯圣文《数据安全之数据库安全黄金法则》 前言 开发网站登录功能时,如何保证密码在传输过程/储存的安全? 相信不少前后端的朋友,在面试时都会被问到类似的问题。 在我对密码学一无所知时,也仅会回答:MD5加密

强大的哈希算法几乎会为每个唯一输入创建一个新存储桶。

一文搞懂Web中暗藏的密码学

3.2 例子二:网站登陆

在web开发中,哈希算法使用最频繁的是在网站登陆应用上:

绝大多数的网站,在将登陆数据存入时,都会将密码哈希后存储。

  • 这是为了避免他人盗取数据库信息后,还原出你的初始输入。
  • 且下次登录时,Web 应用程序将再次对你的密码进行哈希处理,并将此哈希与之前存储的哈希进行比较。
  • 如果哈希匹配,即使 Web 应用程序中没有实际的密码存储,Web 应用程序也确信你知道密码。

注册:

一文搞懂Web中暗藏的密码学

登陆:

一文搞懂Web中暗藏的密码学

哈希算法的一个有趣的方面是:无论输入数据的长度如何,散列的输出始终是相同的长度。

从理论上讲,碰撞冲突将始终在可能性的范围之内,尽管可能性很小。

与之相反的是编码。

4. 什么是编码?

编码定义:将数据从一种形式转换为另一种形式的过程,与加密无关。

它不保证机密性,完整性和真实性这三种加密属性,因为:

  • 不涉及任何秘密且是完全可逆的。
  • 通常会输出与输入值成比例的数据量,并且始终是该输入的唯一值。
  • 编码方法被认为是公共的,普遍用于数据处理。
  • 编码永远不适用于操作安全性相关。

4.1 URL编码

又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了:

  • 常用的数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等)
  • 剩下的其它所有字符必须通过%xx编码处理。

现在已经成为一种规范了,基本所有程序语言都有这种编码,如:

  • js:encodeURI、encodeURIComponent
  • PHP:urlencode、urldecode 等。

编码方法很简单,在该字节ascii码的 16 进制字符前面加%. 如 空格字符,ascii码是 32,对应 16 进制是'20',那么urlencode编码结果是:%20。

  1. # 源文本: 
  2. The quick brown fox jumps over the lazy dog 
  3.  
  4. # 编码后: 
  5. #!shell 
  6. %54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67 

4.2 HTML实体编码

在HTML中,需要对数据进行HTML编码以遵守所需的HTML字符格式。转义避免 XSS 攻击也是如此。

一文搞懂Web中暗藏的密码学

4.3 Base64/32/16编码

base64、base32、base16可以分别编码转化 8 位字节为 6 位、5 位、4 位。

16,32,64 分别表示用多少个字符来编码,

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME,在XML中存储复杂数据。

编码原理:

Base64编码要求把 3 个 8 位字节转化为 4 个 6 位的字节

之后在 6 位的前面补两个 0,形成 8 位一个字节的形式

6 位 2 进制能表示的最大数是 2 的 6 次方是 64,这也是为什么是 64 个字符的原因

A-Z,a-z,0-9,+,/这 64 个编码字符,=号不属于编码字符,而是填充字符

Base64映射表,如下:

一文搞懂Web中暗藏的密码学

举个栗子:

一文搞懂Web中暗藏的密码学

  • 第一步:“M”、“a”、"n"对应的ASCII码值分别为 77,97,110,对应的二进制值是01001101、01100001、01101110。如图第二三行所示,由此组成一个 24 位的二进制字符串。
  • 第二步:如图红色框,将 24 位每 6 位二进制位一组分成四组。
  • 第三步:在上面每一组前面补两个 0,扩展成 32 个二进制位,此时变为四个字节:00010011、00010110、00000101、00101110。分别对应的值(Base64编码索引)为:19、22、5、46。
  • 第四步:用上面的值在 Base64 编码表中进行查找,分别对应:T、W、F、u。因此“Man”Base64编码之后就变为:TWFu。

上面的示例旨在指出,编码的用例仅是数据处理,而不为编码的数据提供保护。

4. 什么是混淆?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读