前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >密码发展史以及常用编码算法介绍

密码发展史以及常用编码算法介绍

作者头像
全栈工程师修炼指南
发布2020-10-23 17:46:42
1.8K0
发布2020-10-23 17:46:42
举报

[TOC]

0X00 密码发展史

描述:密码是一种用来混淆的技术,它希望将正常的(可识别的)信息转变为无法识别的信息。当然,对一小部分人来说,这种无法识别的信息是可以再加工并恢复的。密码在中文里是“口令”(password)的通称。登录网站、电子邮箱和银行取款时输入的“密码”其实严格来讲应该仅被称作“口令”,因为它不是本来意义上的“加密代码”,但是也可以称为秘密的号码。主要限定于个别人理解(如一则电文)的符号系统,如密码电报、密码式打字机。

说白了密码源自于人与人之间不信任,大家都想保护自己的私有财产,所以各种加密算法被创造了出来。

  • 第一代密码:早期在设计软件或网站的时候,数据库存中存放用户名和密码大致是这样的
WeiyiGeek.第一代密码
WeiyiGeek.第一代密码

WeiyiGeek.第一代密码 可以看到,用户名和密码都是明文的形式存储在数据库中。这种设计思路非常简单,但其安全问题也一下子暴漏出来了。一旦数据库被“脱裤”或者用户网络被攻击,用户名和密码便会立刻泄漏。

  • 第二代密码:
    • 为了规避第一代密码设计的缺陷,这次程序猿们在数据库中不直接保存明文密码,而是存储加密之后的密码,MD5 就是其中最典型的加密算法。
    • MD5 是一种单向散列函数,单向散列函数的作用是将任何长度的一段数据散列成固定长度,常用于生成消息认证码等等,可以与非对称算法一起用于数字签名。
    • MD5 因为其不可逆的特性,所以程序猿们常常用来对数据库中的密码进行加密。这样做的好处是,如果数据库不幸遭遇脱裤事件(其实现在国内大型的网站几乎没有不落马的,被脱裤很正常),那么就算泄漏出来的也不是明文的密码,危害不至于那么大。
    WeiyiGeek.第二代密码
    WeiyiGeek.第二代密码

    WeiyiGeek.第二代密码 你脑补着黑客拿到这串数据时一脸茫然的样子,但道高一尺魔高一丈,随着计算机运算能力的提升以及硬盘成本的降低,人们想到了将所有常见的单词组合的 MD5 结果建立数据库以供查询(这种我们称之为彩虹表破解)。

    WeiyiGeek.MD5
    WeiyiGeek.MD5

    WeiyiGeek.MD5 因此,只要你将密码设置的复杂一点,第二代密码也是没那么容易被破解的:

  • 第三代密码
    • 可我们的网站或程序总不能要求用户一定要使用超复杂的密码组合,那么如何确保数据库丢失后密码的安全性呢?换言之,就是如何将用户简单的密码变得更复杂一些?
      • 加点盐是一个不错的解决方案!
    • 盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
    • 实现“加盐”的操作也并不复杂,只要我们在进行 MD5 计算前随机地为用户的密码加上一串字符即可。比如先将用户的原始密码计算一次 MD5 值,取中间 16 位加在原始密码后边,再计算一次 MD5 的值就是“加盐”的效果啦。
    WeiyiGeek.
    WeiyiGeek.

    WeiyiGeek. 最后,世界上并不存在最锋利的矛和最坚硬的盾;只有不断提高破解的成本,直到黑客觉得“不值当”的时候,就是相对的安全!

0x01 常规算法
1.Hash 算法

Q:什么是 Hash?(自维基百科) 答:散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。 散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。 该函数将数据打乱混合,重新创建一个叫做散列值的指纹。 散列值通常用来代表一个短的随机字母和数字组成的字符串; 好的散列函数在输入域中很少出现散列冲突,在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

世界上没有两片完全相同的树叶,也没有两个相同的指纹,散列函数是用于从数据中创建小的数字指纹的方法。

0x02 常见加密
单向加密

描述:单向加密只能加密,不能解密,常用于提取数据的指纹信息以此来验证数据的完整性。 但是单向加密会引发雪崩效应:雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文或密钥的少量变化会引起密文的很大变化,就像雪崩前山上看上去很平静,但是只要有一点问题,就会造成一片大崩溃。 可以用在很多场合对于Hash码,雪崩效应是指少量消息位的变化会引起信息摘要的许多位变化。

单向加密中使用的主要Encrpty有 常用的加密工具: md5sum、sha1sum/sha256/sha512sum、openssl dgst;

单向加密中使用的主要算法有 加密算法:md5(标准密钥长度128位)、sha1(标准密钥长度160位)、md4(该算法不安全)、CRC-32等算法

0x01 常见编码

编码形象的描述:士兵打仗

代码语言:javascript
复制
进攻 ----(编码)---> 鼓声  ----(传输)---> 士兵 ----(解密)---> 行为

字符编码 描述:Character Encoding 也叫字集码,是把字符集中的字符编码指定集和某一对象(列如:比特模式/自然数串行/8位组或者电脉冲),以便文本在计算机中存储和通过通信网络传递; 字符集编码的早期标准:ASCII(1963) 和 EBCDIC (1964)

编码案例:

代码语言:javascript
复制
ASCII码表: 十进制48[0] - 65[A] - 95[a],注意32后为可见字符;
Morse Code编码:-- --- .-. ... . -....- -.-. --- -.. . 
URL编码: http://www.oschina.net/search?scope%20=%20bbs&q=C%E8%AF%AD%E8%A8%80            
Unicode编码:\u8fd9\u662f\u4e2d\u6587
Utf-8编码:汉字
HTML实体编码:<html lang="zh_cn">
Base64编码:6YeN5bqG5piv5Liq576O5Li95b6X5Z+O5biCCg==
十六进制编码:313233343536373839 (123456789)
WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

0. ASCII码表

描述:Aerican Standard Code for Information Interchange,美国信息交换标准代码是基于拉丁字母的一套电脑编码系统;主要显示现代英语它的扩展版本EASCII则支持西欧语言,并等于国际标准ISO/IEC646;

1. 莫尔斯电码(Morse Code)

描述:是一种时通时断的信号代码,通过点(.)/划(-)/每个字符间短的停顿(在点和划之间的停顿)/每个词之间中等的停顿以及句子之间的长的停顿;即通过不同的排列组合顺序来表达不同的英文字母,数字和标点符号;莫尔斯电码在海事通信中被作为国际标准一直使用到1999年;

WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

小故事: 我们经常看一些谍战剧,谍战剧里敌特、地下党员以及八路军各部间发送情报的时候,一般都是通过电报发送的,电报在传递的过程中,需要发报员用电键发出长短不一的电码,收报员就会听到电报机发出的滴滴滴答答答的声音。 其实电报发出的声音都是”滴”和”答”的组合,”答”的声音是”滴”的三倍长,而且在谍战剧中将情报转成电报的”滴”和”答”声主要通过摩尔斯电码; 发报员要先通过一种方式,将想要发送的情报转成电报的滴答声,收报员在听到滴答声之后,再将它们翻译成正常的文字。这个过程就是字符编码和字符解码。

2. Unicode

中文的简称:万国码/国际码/统一码/单一码/是一种为支持全世界所使用的各种编写系统而设计的字符编码标准,它对世界上大部分的文章系统进行了整理/编码;Unicode涵盖的数据除了视觉上的字形.编码方法/标准的字符编码外还包含了字符特性如大小写字符;

由于它采用各种编码方案,其中一些可用于表示Web应用程序中的不常见字符;

16位Unicode编码的工作原理与URL编码类似; 特点:16位Unicode编码的字符以%u为前缀,其后是这个字符的十六进制Unicode码点 %u2215 /

3. UTF-8

表示中文光有一个unicode是不够用的,还有使用其他的编码实现方法,Unicode的实现方法称为Unicode转换格式(Unicode Transformation Format简称UTF),但大多数都会默认显示为utf-8

Q:什么是UTF-8? 答:8-bit Unicode Transformation Format是一种针对Unicode的可变长度的字符编码也是一种前缀码;它使用一个或几个字节表示每个字符。 特点:为通过HTTP进行传输,UTF-8编码的多字节以%为前缀,其后用十六进制表示每个字节 %e2%89%a0等同于;

它可以表示Unicode标准种任何字符,且其编码种的第一个字节任然与ASCII码兼容,这使得原来处理ASCII字符软件部需要或者只做小部分修好即可以继续使用;

4. URL编码

描述:URL编码方案主要用于对扩展ASCII字符集中的任何有问题的字符进行编码(中文),使其可通过HTTP安全传输;

代码语言:javascript
复制
%3d   = 
%25   % 
%20   空格
%0a   新行   
%00   空字节(文件上传截断)

特点:任何URL编码的字符都以%为前缀,其后是这个字符的二位十六进制ASCII代码;

5.HTML编码

描述:是一种用于表示问题字符以将其安全并入HTML文档的方案。有许多字符具有特殊的含义(如HTML的元字符),并被用于定义文档结构而非其内容;

代码语言:javascript
复制
&quto;   "
'   ' 
&lt;     < 
&gt;     >
6.Base64编码

仅用一个可打印的ASCII字符就可安全转换任何二进制数据,它常用于对电子邮件附件进行编码,使其通过SMTP安全传输;

7.十六进制编码

描述:许多应用程序在传送二进制数据时直接使用十六进制编码,用ASCII字符表示十六进制数据库块。 例如,对cookie中的用户名daf进行十六进制编码,会得到以下结果646166

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0X00 密码发展史
  • 0x01 常规算法
    • 1.Hash 算法
    • 0x02 常见加密
      • 单向加密
      • 0x01 常见编码
        • 0. ASCII码表
          • 1. 莫尔斯电码(Morse Code)
            • 2. Unicode
              • 3. UTF-8
                • 4. URL编码
                  • 5.HTML编码
                    • 6.Base64编码
                      • 7.十六进制编码
                      相关产品与服务
                      数据库
                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档