在对称加密中,数据被转换为不可读的密文,只有使用相同的密钥才能将其还原为原始的明文。
发送方和接收方在进行加密和解密操作时使用相同的密钥。
-
DES(Data Encryption Standard):DES是一种使用56位密钥的对称加密算法,已经被认为是不安全的,因为密钥长度较短。
-
3DES(Triple Data Encryption Standard):3DES是对DES算法的改进,通过多次应用DES算法增加密钥长度,提高了安全性。
-
AES(Advanced Encryption Standard):AES是一种广泛使用的对称加密算法,它支持不同的密钥长度(128位、192位和256位),被认为是目前最安全和最常用的对称加密算法之一。
异或的概念:异或运算是在二进制数中的一种按维进行计算的逻辑运算符。
其真值表为:
左操作数 | 右操作数 | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
总结: 左操作数和右操作数不同则为1,否则为0。
好记的方法: 男人和女人在一起才能生孩子(1),男男和女女都不能生孩子(0)。
异或操作运算符很有意思,当A与B异或成C后,C与A再次异或可以得到B,C与B再次异或后可以得到A。
那么在密码学里面可以这么运用
当小红想发送数据小绿,但是为了防止发送的数据被中间人查看或者篡改,那么他们需要把数据进行加密发送。
于是小红和小绿商量用异或的方式进行数据加密传输,同时约定 异或值为 1111 (2进制)
下面的例子,数据均以二进制展示
step1:
小红 发送 1010,将1010 与 1111 异或 -> 0101
step2:
小绿 收到数据 0101 结果后,将0101 与 1111 异或 -> 1010
于是小红和小绿就能进行愉快的通讯了。
但是好景不长,出现了一个捣蛋的中间人,先叫他皮蛋把。
皮蛋虽然无法将加密的密文进行解密,但是他可以把拦截到的密文进行随意的修改再发送给小红/小绿,小红/小绿收到的信息可能变成了一坨乱码。
其次,如果皮蛋某种情况下偷听到了 加密的值(异或值)。那么对小红/小绿 简直是毁灭性的打击。
以上这两种情况,对于小红/小绿都是不可接受的结果。
在非对称加密中,有两个密钥:公钥和私钥。公钥是公开的,可以被任何人获取和使用,而私钥是保密的,只有密钥的拥有者可以访问和使用。
公钥用于加密数据,而私钥用于解密数据。数据加密后,只能通过相应的私钥进行解密。这种加密方法提供了更高的安全性,因为私钥只在密钥的拥有者手中,并且不需要共享给其他人。
常见的非对称加密算法包括:
-
RSA:RSA是一种广泛使用的非对称加密算法,基于大数分解的数学原理。
-
ECC(Elliptic Curve Cryptography):ECC是一种基于椭圆曲线的非对称加密算法,具有相同安全性的情况下使用更短的密钥长度,因此计算效率更高。
具体RSA算法文章机器非对称加密原理可参考文章:
密码学笔记 - 阮一峰的网络日志 (ruanyifeng.com)
RSA算法原理(一) - 阮一峰的网络日志 (ruanyifeng.com)
RSA算法原理(二) - 阮一峰的网络日志 (ruanyifeng.com)
巧就巧在,加密是用公钥,解密是用私钥。如果有人尝试破解私钥,目前只能使用暴力破解,在当今计算机算力没有质的飞越时,那么要使用暴力破解1024位RSA加密的结果是相当困难的。
运用在之前提到的小红/小绿的场景中。
小绿作为做为服务端,生成私钥和公钥;公钥暴露给所有人,私钥保存好。
小红在拿到小绿的公钥后,把需要发送的数据用小绿的公钥进行计算得到结果并发送给小绿。
小绿拿到结果后,使用私钥进行解密。
或许你会有疑问,这样虽然做到了加密,但是这仅仅是小红向小绿发送了加密数据了,小绿如果要向小红发送数据改如何发送呢(也就是说,这仅仅是单方面的加密,毕竟通讯肯定会有双向通讯的场景)?
别着急,咱们可以这样,小红和小绿可以商量第一步先使用非对称加密,后续都使用对称加密。
step1:
小红将 对称加密的秘钥使用小绿的公钥进行加密。
step2:
小绿用私钥解密后,得到小红 发送过来的对称加密秘钥。
step3:
小绿把数据 使用 对称加密的秘钥进行数据加密并发送给小红。
step4:
小红收到数据后,可以根据秘钥将数据进行解密。
至此,只要小绿能够保存好私钥,那么小红和小绿的通讯是安全的。
问:为什么要先采用非对称加密,后面采用对称加密?
答:非对称加密对性能有影响。
问:有没有可能被中间人查看或篡改数据,如果可以的话,如何防止?
答:可以查看,但是是加密的。可以篡改(因为小绿的公钥是公开的)。如何防止请看数字签名和数字证书
对称加密:
优点: 相比于非对称加密,对称加密的加解密速度更快。加密解密方式相对简单。
缺点: 由于秘钥需要双方都知道,所以双方中只要有一个泄露了秘钥,那么就可以伪造数据发送了。无法判断数据是否被篡改。
非对称加密:
优点: 只需要保留公钥给调用方,只需要被调用方保存好私钥即可,降低了泄露秘钥(私钥)的概率。
缺点: 相比于对称加密设计复杂,非对称加密算法对加密数据的长度有一定的限制,一般只能加密较短的数据。无法判断数据是否被篡改。