Commit f97ab7ec authored by 刘磊's avatar 刘磊

刘磊前端分享提交

parent 63ce8b68
Pipeline #13699 failed with stage
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2021-11-10</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>
<body class="stackedit">
<div class="stackedit__html"><h1><a id="_0"></a>加密方式概览</h1>
<p>公元683年,唐中宗即位。随后,武则天废唐中宗,立第四子李旦为皇帝,但朝政大事均由她自己专断。</p>
<p>裴炎、徐敬业和骆宾王等人对此非常不满。徐敬业聚兵十万,在江苏扬州起兵。裴炎做内应,欲以拆字手段为其传递秘密信息。后因有人告密,裴炎被捕,未发出的密信落到武则天手中。这封密信上只有“青鹅”二字,群臣对此大惑不解。</p>
<p>武则天破解了“青鹅”的秘密:“青”字拆开来就是“十二月”,而“鹅”字拆开来就是“我自与”。密信的意思是让徐敬业、骆宾王等率兵于十二月进发,裴炎在内部接应。“青鹅”破译后,裴炎被杀。接着,武则天派兵击败了徐敬业和骆宾王。<br>
  <img src="https://img-blog.csdnimg.cn/b8feae1f45f34291a8b49fee648f54e7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATEVJIExJVSAtLS3liY3nq68=,size_11,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p>
<h2><a id="_9"></a>一.古典密码加密</h2>
<p><strong>① 替换法</strong></p>
<p>替换法很好理解,就是用固定的信息将原文替换成无法直接阅读的密文信息。例如将 b 替换成 w ,e 替换成p ,这样bee 单词就变换成了wpp,不知道替换规则的人就无法阅读出原文的含义。</p>
<p>替换法有单表替换和多表替换两种形式。单表替换即只有一张原文密文对照表单,发送者和接收者用这张表单来加密解密。在上述例子中,表单即为:a b c d e - s w t r p 。</p>
<p>多表替换即有多张原文密文对照表单,不同字母可以用不同表单的内容替换。</p>
<p>例如约定好表单为:表单 1:abcde-swtrp 、表单2:abcde-chfhk 、表单 3:abcde-jftou。</p>
<p>规定第一个字母用第三张表单,第二个字母用第一张表单,第三个字母用第二张表单,这时 bee单词就变成了</p>
<p>(312)fpk ,破解难度更高,其中 312 又叫做密钥,密钥可以事先约定好,也可以在传输过程中标记出来。</p>
<p><strong>② 移位法</strong></p>
<p>移位法就是将原文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后得出密文,典型的移位法应用有 “ 恺撒密码 ”。</p>
<p>例如约定好向后移动2位(abcde - cdefg),这样 bee 单词就变换成了dgg 。</p>
<h2><a id="_31"></a>二.近代密码学</h2>
<p>古典密码虽然很简单,但是在密码史上是使用的最久的加密方式,直到“概率论”的数学方法被发现,古典密码就被破解了。古典密码的安全性受到了威胁,外加使用便利性较低,到了工业化时代,近现代密码被广泛应用。</p>
<p>恩尼格玛机</p>
<p>恩尼格玛机是二战时期纳粹德国使用的加密机器,后被英国破译,参与破译的人员有被称为计算机科学之父、人工智能之父的图灵。<br>
<img src="https://img-blog.csdnimg.cn/5e5312578bfe49ed9e428d4db28df6f2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATEVJIExJVSAtLS3liY3nq68=,size_8,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"><br>
恩尼格玛机使用的加密方式本质上还是移位和替代,只不过因为密码表种类极多,破解难度高,同时加密解密机器化,使用便捷,因而在二战时期得以使用。</p>
<h2><a id="_40"></a>三.现代密码学</h2>
<h2><a id="__42"></a>① 哈希函数</h2>
<p>哈希函数,也见杂凑函数、摘要函数或散列函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有MD5、SHA-1、SHA256,多应用在文件校验,数字签名中。</p>
<p>哈希函数是现代密码体系中的一个重要组成部分,被普遍应用在社会生产生活当中。平时大家比较感兴趣的数字货币,就使用了哈希函数。</p>
<p><strong>哈希函数的特性</strong><br>
哈希函数具有两大基本属性:单向性和抗碰撞性。单向性决定了哈希函数的正向计算效率高,反向计算难度非常大,几乎不可能;而抗碰撞性决定了无法找到两个不同的输入,使得其输出(即哈希值)是一致的。</p>
<p><strong>单向性</strong><br>
哈希函数的单向性意味着,给定一个哈希值,我们无法(很难)逆向计算出其原像输入。即给定一个哈希值 y,我们无法计算出 x,使得 y=H (x)。简单来说,是无法逆向推理。</p>
<p><strong>抗碰撞性</strong><br>
碰撞指的是在输入区间 D 中的任意两个不同输入 x、y,两者的哈希值是相同的。那么哈希函数的抗碰撞性意味着,找出任意两个不同的输入值 x、y,使得 H (x)= H (y)是困难的。(这里称为「困难」的原因,是消息空间是无穷的,而哈希值空间是有限的,因此一定会存在碰撞,只是对寻找碰撞的算力需要有难度上的约束)。</p>
<p><strong>哈希函数算法「家族」</strong><br>
国际: MD4、MD5、SHA-1、SHA-256、SHA-3。(MD 系列、SHA-1 已被破解)<br>
国内:国产自主研发的商用密码哈希算法,即 SM3。</p>
<p><strong>哈希函数的应用:</strong><br>
口令保护:在现代 web 应用中,账户系统的口令通过哈希函数处理后,再存储于服务器上,使得口令只对用户自己可知;<br>
软件保护:对外发布软件时,同时使用哈希函数计算出软件的哈希值,与软件一起发布,防止用户下载假冒软件;<br>
区块链:在区块链中,账户与交易都涉及哈希函数的使用。</p>
<h2><a id="__66"></a>② 对称密码</h2>
<p>对称密码应用了相同的加密密钥和解密密钥。对称密码分为:序列密码(流密码),分组密码(块密码)两种。流密码是对信息流中的每一个元素(一个字母或一个比特)作为基本的处理单元进行加密,块密码是先对信息流分块,再对每一块分别加密。</p>
<p>例如原文为1234567890,流加密即先对1进行加密,再对2进行加密,再对3进行加密……最后拼接成密文;块加密先分成不同的块,如1234成块,5678成块,90XX(XX为补位数字)成块,再分别对不同块进行加密,最后拼接成密文。前文提到的古典密码学加密方法,都属于流加密。<br>
<strong>示例</strong><br>
我们现在有一个原文3要发送给B<br>
设置密钥为108, 3 * 108 = 324, 将324作为密文发送给B<br>
B拿到密文324后, 使用324/108 = 3 得到原文<br>
<strong>特点</strong><br>
*加密速度快, 可以加密大文件<br>
*密文可逆, 一旦密钥文件泄漏, 就会导致数据暴露<br>
*加密后编码表找不到对应字符, 出现乱码<br>
*一般结合Base64使用</p>
<h2><a id="__81"></a>③ 非对称密码</h2>
<p>对称密码的密钥安全极其重要,加密者和解密者需要提前协商密钥,并各自确保密钥的安全性,一但密钥泄露,即使算法是安全的也无法保障原文信息的私密性。</p>
<p>在实际的使用中,远程的提前协商密钥不容易实现,即使协商好,在远程传输过程中也容易被他人获取,因此非对称密钥此时就凸显出了优势。</p>
<p>非对称密码有两支密钥,公钥(publickey)和私钥(privatekey),加密和解密运算使用的密钥不同。用公钥对原文进行加密后,需要由私钥进行解密;用私钥对原文进行加密后(此时一般称为签名),需要由公钥进行解密(此时一般称为验签)。公钥可以公开的,大家使用公钥对信息进行加密,再发送给私钥的持有者,私钥持有者使用私钥对信息进行解密,获得信息原文。因为私钥只有单一人持有,因此不用担心被他人解密获取信息原文。非对称加密与对称加密相比,其安全性更好;非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。<br>
在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。<br>
<img src="https://img-blog.csdnimg.cn/0306398a1d9746a1bdddddcc8d6e8158.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATEVJIExJVSAtLS3liY3nq68=,size_17,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"></p>
<h2><a id="BASE64_92"></a>BASE64</h2>
<h3><a id="_BASE64_93"></a>一. BASE64是什么</h3>
<p>Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一,所以可以依据概括:它是一种编码方式,记住它不是加密的方式,它没有秘钥的概念,任何人拿到数据都能解析出来。它只是一种编码方式</p>
<h3><a id="_BASE64_95"></a>二. BASE64应用场景</h3>
<p><img src="https://img-blog.csdnimg.cn/a0201f2d056442e18846d9fcbc1a8dbc.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATEVJIExJVSAtLS3liY3nq68=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"><br>
<strong>1</strong>.打开某个邮件的源文件,可以看到邮件的正文部分,使用了base64编码。<br>
Content-Transfer-Encoding:base64</p>
<p>这样的初衷,是为了满足电子邮件中不能直接使用非ASCII码字符的规定<br>
比如图片文件,附件是二进制文件。电子邮件的协议不能支持到,使用base64进行编码,传输,在客户端再去解码得到原始文件。<br>
<strong>2</strong>.如果纯文本数据包含不可见字符,就需要使用base64,比如xml文件某节点数据包含可见字符,显示的话就是乱码,不能够编辑操作。使用base64编码后显示,需要还原的地方再解码。(二进制文件图片应用类似)<br>
<strong>3</strong>.简单加密</p>
<h3><a id="_BASE64_105"></a>三. 手动转化BASE64</h3>
<p><strong>ascii 字符代码表</strong><br>
<img src="https://img-blog.csdnimg.cn/cf758ea7154f4e3b8fc2ffedd68a2931.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATEVJIExJVSAtLS3liY3nq68=,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"><br>
<strong>base64对照表</strong><br>
<img src="https://img-blog.csdnimg.cn/583ae32200e8466a8bc31678d6cf8a60.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATEVJIExJVSAtLS3liY3nq68=,size_13,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述"><br>
转前: s 1 3<br>
先转成ascii:对应 115 49 51<br>
2进制: 01110011 00110001 00110011<br>
6个一组(4组) 011100110011000100110011<br>
然后才有后面的 011100 110011 000100 110011<br>
然后计算机一个字节占8位,不够就自动补两个高位0了<br>
所以有了高位补0<br>
科学计算器输入 00011100 00110011 00000100 00110011<br>
得到 28 51 4 51<br>
查对下照表 c z E z</p>
</div>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment