一文详解Hash加密、对称加密与非对称加密
一文详解Hash加密、对称加密与非对称加密
从古至今,加密技术都与我们的生活息息相关。在现代网络安全中,加密技术更是作为核心支柱,保障着信息的安全传输。本文将用通俗易懂的方式,带你掌握常见的三种加密方式:Hash加密、对称加密和非对称加密。
Hash加密
定义
Hash加密是一种单向的加密方式,它可以将任意长度的输入数据转化为固定长度的输出数据,这个过程一般是“不可逆”的。
常见的Hash加密方法
- MD5
- 目前算是比较常用的加密方法,但是由于一些常见的简单密码已经被破解,存在一定风险
- SHA系列
- SHA1(160)、SHA2(224)、SHA224、SHA256、SHA384、SHA512等
- 后面的位数代表生成hash值的二进制数,但一般展示给我们的是人易读的16进制数(也就是0-F),也就是它的二进制数/4位。
- 位数越多,代表越难被暴力破解
- HMAC系列
- HmacMD5、HmacSHA1、HmacSHA2、HmacSHA256、HmacSHA384等
Hash缺点
虽然Hash加密是单向的,但如果存在一个超大的数据库,里面保存了常见密码或数字组合hash加密后的数据,那么通过匹配加密结果,就可能得到原文。因此,存在被暴力破解的风险。但是,如果密码足够复杂,破解难度会大大增加。
Hash应用场景
假设刘备需要将"今晚驻扎于夷陵"的消息加密后传给诸葛亮,使用SHA256加密后的密文如下:
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
可以看到这个消息,除了加密的刘备,其他人都不知道什么意思。但如果要让诸葛亮知道含义,诸葛亮那里必须存有一套他们常用话语加密后的模版,待收到消息后再进行对照找到具体的含义。
但是这安全了吗?如果诸葛亮那边失窃怎么办,不就等于明文在传输?这也说明hash加密只能适用用于特定场景的验证需求,比如密码的校验,数据库密码为保证用户隐私用hash存储,用户输入密码只需要校验hash值是否一致即可验证密码是否正确。
对称加密
定义
对称加密的加密和解密都需要使用一个相同的密钥。这意味着,如果某人使用某个密钥对消息进行了加密,那么只有持有相同密钥的人才能解密该消息。
常见的对称加密方法
- AES
- DES
- 安全性不高,可以被暴力破解,也就是我们说的“撞库”
- RC系列算法
- RC2、RC4、RC5等
- rabbit
刘备和诸葛亮约定了一个密钥"皇叔666",那么他发送给诸葛亮的就是加密后的:
U2FsdGVkX18XQF6vnbNbK2B2kO3K3T5MfGrtwLanl0d5e+gq0oMzwEdkhK3FTW0/
而诸葛亮也可以把密文,用约定的密钥解成原文。
对称加密之间的区别
- 加解密效率
- 加密也是通过程序设计者通过算法来实现的,设计者不同,算法就会有差异,而算法的不同就会带来加解密效率的差异,毕竟谁也不想加解密占用过多的资源和时间。
- 安全性
- 一些加密算法由于设计时间太早已经不符合现代安全需求,如DES因为密钥长度太短,容易被暴力破解
- 而AES支持128、192、256位密钥的加密,所以安全级别会高一些
缺点
现在刘备和诸葛亮可以实时聊天了,那问题又来了,陆逊有没有办法知道他们之间的密钥呢?刘备和诸葛亮如果第一次约定密钥如果不是线下约定而是通过聊天软件或邮件的方式,是不是也有可能被知道?如何再安全一点?
非对称加密
定义
非对称加密是一种使用一对密钥进行加密和解密的加密方式。这一对密钥包括一个公开密钥(Public Key)和一个私有密钥(Private Key)。公开密钥可以公开给任何人使用,而私有密钥则只有密钥的持有者自己才知道。加密和解密操作分别使用这两个不同的密钥进行。
简而言之就是我们把上面的密钥"皇叔666"变成诸葛亮的公钥,这个公钥暴露在外面,谁都可以知道,但是诸葛亮自己有一个私钥可以进行解密,这种情况就算被截获了也无所谓,对方无法知道具体内容。
常见的非对称加密方式
- RSA
- RSA算法具有较高的安全性和较好的性能,广泛应用于数字证书、SSL/TLS协议、加密货币等领域
- DSA
- DSA算法的密钥长度比RSA算法短,但加密效率相对较低。不过,它在数字签名方面表现出色,常用于确保数据的真实性和完整性。
- ECC
但是大家有没有发现这里有一个问题,陆逊虽然不知道刘备说了什么,但是他也可以使用诸葛亮的公钥自己加密一个消息发给诸葛亮。一个致命的问题,如何证明刘备是刘备?
为了防止陆逊对消息的伪造和篡改,于是我们引出签名的概念。
数字签名
众所周知,既然诸葛亮能有自己的公钥和私钥,那刘备也能!于是刘备在发送消息时,用自己的私钥对信息内容进行签名,诸葛亮收到消息时,用刘备的公钥进行验签,若一致,则证明是刘备本人。
这时候如果陆逊在篡改消息时用自己的私钥去签名,那么诸葛亮在用刘备的公钥进行验签时,就会出现签名不一致的情况,那就证明这个消息是被篡改过的!
一些关系非对称加密的问题
- 为什么我的私钥签名的东西,能用公钥验签/为什么我公钥加密的东西,能用私钥解密呢?
- 私钥签名的原理:
当你使用私钥对数据进行签名时,你实际上是在对数据进行某种数学变换,这种变换是基于私钥的。签名算法会生成一个与数据内容和私钥都相关的唯一签名值。 - 公钥验签的原理:
当你使用公钥对签名进行验证时,你实际上是在检查签名值是否由对应的私钥生成。验证过程涉及对签名值进行某种数学变换,这种变换是基于公钥的。如果签名值是由对应的私钥生成的,那么验证过程将成功,表明数据的完整性和真实性得到了确认。
- 既然私钥这么重要,我私钥的安全谁来替我保证呢?
- 私有性:私钥具有高度的私密性。只有私钥的持有者(或生成者)知道私钥的具体内容,而这个一般保存于持有者物理介质-硬件中。
- 唯一性:每个私钥都是独一无二的,与特定的公钥相对应,具体不可复制和替代性。
- 加密与权限控制:私钥文件往往使用强密码或其他加密技术来保护私钥的机密性,且设有严格的访问控制机制
以上这些原因都保障了个人私钥安全性
- 如何生成一个我的公钥和私钥呢?以Windows-RSA举例
Windows
1. 打开cmd,输入
ssh-keygen -t rsa -b 1024
这里的-t rsa表示生成RSA类型的密钥,-b 1024指定密钥长度为1024位
2. 然后系统会提示你选择文件保存路径
默认为C:\Users\YourUsername\.ssh\id_rsa
3. 生成的文件包括id_rsa.pub(公钥)和id_rsa(私钥)
其他系统可自行搜索方法
非对称加密与对称加密的区别
毫无疑问,非对称加密的安全性远远高于对称加密。正因为其出色的安全性,加密和解密都涉及到了复杂的数学运算,他的速度远远不如对称加密,其带来的资源消耗也远远大于对称加密。
所以一般情况下,双方在第一次会使用非对称加密来约定一个双方以后使用的密钥,在这之后将会用这个密钥并使用对称加密的方式来传输信息。然后再定期更换密钥。