关于密码学那些事

编码表知识

为什么需要编码表呢?在计算机中无论任何数据的传输、存储、持久化,都是以二进制的形式体现的,那么当我存一个字符的时候,计算机需要持久化到硬盘,或者保存在内存中。这个时候保存在内存、硬盘的数据显然也是二进制的。那么当我需要从硬盘、内存中取出这些字符,再显示的时候,为什么二进制会变成了字符呢?这就是码表存在的意义。码表其实就是一个字符和其对应的二进制相互映射的一张表。这张表中规定了字符和二进制的映射关系。

Base64

在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。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。

非对称加密RSA,SM2

这篇文章图解的很清楚
https://blog.csdn.net/baidu_3...

消息摘要

常见的摘要算法有MD5,SHA-1,SHA-256,消息摘要就是将明文通过算法生成一种不可逆的密文,通常密文会比明文短,但是在使用同一个算法中,无论明文长度多少,进行摘要算法后,生成的密文都是固定的。这个密文长度是根据算法走的,比如MD5生成的永远是128位(16字节)的散列值。sha-1生成的是160位,sha-256生成的是256位。
那摘要算法有什么用呢?比如对用户的密码进行保护,做摘要后保存到数据库。下载软件时,官方会给出散列值,如果你下载软件后计算的散列值(去网上能搜到相关软件,好压也有提供)和官网给出的不一致,那么你下载的就不是官方的,有可能是别人篡改的有病毒的或者是盗版的。

数字签名

数字签名可以校验数据的完整性,验证数据有没有被篡改过。数字签名其实就是摘要 + 非对称加密。比如随便找个网站,查看到签名算法为sha256RSA,就代表用sha256算法做的摘要,用RSA算法做的非对称加密。其中签名用的是私钥签名,验证签名用的是公钥。

你可能感兴趣的