为何须要编码表呢?在计算机中不管任何数据的传输、存储、持久化,都是以二进制的形式体现的,那么当我存一个字符的时候,计算机须要持久化到硬盘,或者保存在内存中。这个时候保存在内存、硬盘的数据显然也是二进制的。那么当我须要从硬盘、内存中取出这些字符,再显示的时候,为何二进制会变成了字符呢?这就是码表存在的意义。码表其实就是一个字符和其对应的二进制相互映射的一张表。这张表中规定了字符和二进制的映射关系。算法
在参数传输的过程当中常常遇到的一种状况:使用全英文的没问题,但一旦涉及到中文就会出现乱码状况。与此相似,网络上传输的字符并不全是可打印的字符,好比二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。Base编码用在加密后,解码用在解密前。由于加密后会发生乱码,不影响使用,但不方便观看,因此进行Base64编码。数据库
最开始用在军事上,这个凯撒怕敌方截获军事情报书,因而使用了加密。凯撒加密就是使用编码表移动的方式实现。
假设个人明文是“attack” ,通过位移为3的凯撒加密以后,就会变成“dwwtfn”。安全
凯撒加密的破解--频度分析法若是你扫描任何一部英文书的文字,而后计算出每一个字母所使用的频率,你会发现惊人的秘密,那就是在英语文字中,使用频率最高的字母永远是e。插一嘴,由于e是元音,元音就像音乐中的主旋律同样,没有主弦律只有伴奏不成歌曲,英语单词中若是没有元音也是不成单词的。每个单词中必须出现一个元音字母。不出所料,a,e,i,o出现的频率最高。那么若是密文中出现h的次数最多,能够根据ASCII码表找到密文的h和明文的e相差位置是多少,那么密钥就是多少,拿到密钥后就能够破解密文了。服务器
DES:Data Encryption Standard ,数据加密标准
AES:Advanced Encryption Standard 高级加密标准
SM4:国密算法网络
对称加密指的是加密和解密用的是同一把钥匙。对称加密算法的特色是算法公开、计算量小、加密速度快、加密效率高。对称可逆,一旦密钥暴漏就会泄露信息。加密后编码表找不到对应的字符,乱码,这点能够经过Base64解决。函数
AES和DES用的密钥位数不同,DES密钥长度是64位,AES是128位。英文密钥分别位8byte和16byte。
AES和DES都有工做模式和填充模式,工做模式经常使用ECB和CBC,ECB能够并行加密,效率高,安全性较差。CBC串行加密,第二块数据须要依赖第一块加密后的密文,加密后一样的原文会获得不一样的密文,效率低,安全性高。使用CBC模式的时候须要额外参数。
填充模式指的是原文位数不够的时候,会自动帮你填充,若是不填充,DES加密原文长度必须是8个byte的整数倍,AES加密原文必须是16个Byte的整数倍。默认的工做模式和填充模式是ECB/PKCS5padding。网站
这篇文章图解的很清楚
https://blog.csdn.net/baidu_3...编码
常见的摘要算法有MD5,SHA-1,SHA-256,消息摘要就是将明文经过算法生成一种不可逆的密文,一般密文会比明文短,可是在使用同一个算法中,不管明文长度多少,进行摘要算法后,生成的密文都是固定的。这个密文长度是根据算法走的,好比MD5生成的永远是128位(16字节)的散列值。sha-1生成的是160位,sha-256生成的是256位。
那摘要算法有什么用呢?好比对用户的密码进行保护,作摘要后保存到数据库。下载软件时,官方会给出散列值,若是你下载软件后计算的散列值(去网上能搜到相关软件,好压也有提供)和官网给出的不一致,那么你下载的就不是官方的,有多是别人篡改的有病毒的或者是盗版的。加密
数字签名能够校验数据的完整性,验证数据有没有被篡改过。数字签名其实就是摘要 + 非对称加密。好比随便找个网站,查看到签名算法为sha256RSA,就表明用sha256算法作的摘要,用RSA算法作的非对称加密。其中签名用的是私钥签名,验证签名用的是公钥。spa
下图表示发件人使用哈希函数,将消息明文进行一个消息摘要,获得了一个hash值,而后使用私钥对这个hash值进行加密,获得signature(签名值),而后将明文和这个签名值一块儿发送过去。
服务器收到后,先要用发件人的公钥进行解密,解密后获得那个hash值,而后将原文也进行一次hash函数的运算,若是得出来的值和解密后的那个hash值一致,表明数据完整,没有被篡改过。