关于对称/非对称加密算法的梳理

先说句题外话,一直把Base64也当作一种比较简单的加密方式,其实这是不对的,虽然经过Base64转码后,肉眼是看不懂的,但是一般语言中都有Base64的转码和解码函数,所以Base64确实仅仅是一种转码方式。

base64 :(兼容所有bit8位的字符,然后用64种字符进行转码,达到一致性)

      意思就是:考虑到多语言原因,有的特殊字符传输不兼容,因为很多都是只支持ASSIC码,那么特殊字符就会找不到对应的ASSIC码,所以采用BASE64 可以叫全天下所有字符用 64中字符表示,而且这64种字符都在 ASSIC 中,所以在网络传输中很流行。

   特点:

      首先这算法是编码, 不是压缩, 编码后只会增加字节数;

      算法简单, 几乎不会影响效率;

      算法可逆, 解码很方便, 不用于私密信息通信;

      虽然解码方便, 但毕竟编码了, 肉眼还是不能直接看出原始内容;

      加密后的字符串只有[0-9a-zA-Z+/=], 不可打印字符(包括转移字符)也可传输;

MD5:一种被广泛使用的密码散列函数,可以产生出一个固定长度(16、32、64位)的散列值(hash value),用于确保信息传输完整一致(比如下载文件的完整性验证),MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

  特点:

  1. 不可逆运算,所以自然既不是对称加密也不是非对称加密(对称与非对称是相对于可解密的算法而言,sha、Hmac算法一般也都是不可逆的,都是基于hash散列的)。
  2. 对不同的数据加密的结果是定长的(16/32/64)位字符(不管文件多大都一样)
  3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
  4. 抗修改性 : 信息“指纹”,对原数据进行任何改动,哪怕只修改一个字节,所得到的 MD5 值都有很大区别.
  5. 弱抗碰撞 : 已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的.
  6. 强抗碰撞: 想找到两个不同数据,使他们具有相同的 MD5 值,是非常困难的,但是是有可能的.

下面来到正题,对称加密和非对称加密

AES 对称加密算法

      这是加密算法,base64只是编码,不是加密,AES 加密和解密效率高,双方必须使用同一个秘钥,如果不考虑秘钥被偷窃,那么AES 是很安全的

    如需了解具体使用的代码和流程请访问原博客  https://blog.csdn.net/Liu_York/article/details/87863503?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-1-87863503.nonecase

RSA 非对称加密(以下内容建议仔细阅读和理解)

    概念:如果B只给A传加密数据,那么B需要A给的公钥,B用这个公钥进行加密,A用自己对应的私钥解密即可。

场景问题:

          公钥是公开的,大家都可以给A传数据,A都能用自己的私钥解开(因为大家都是用对应且公开

          的公钥加密的),那么A就不晓得到底哪个才会B发送的,所以就有了签名

          签名:就是用私钥签名(说白了就是用私钥加密,只有公钥才能解开)

          为了让A知道是B发送的,所以B需要给A自己的公钥(这个公钥不是上面说的公钥,而是B提供的

          另一套公私-钥匙)

     解决方案:

          1 A有一套公-私钥,B也有一套公私要,A把自己的公钥给B,B把自己的公钥给A

          2 B给A传数据text,首先用A给的公钥加密(防止别的看到)

          3 B 再将加密的结果 用B自己的私钥签名(因为公钥在A,如果A解开了,说明A晓得就是B发送的)

                    其实B的公钥不但A有,大家都是公开的,所以大家都可以解开,都知道是B发送的,但是B在

                    发送前用A的公钥加密了,所以对大家而言,虽然解开了第一层,还有第二层加密

          4 A收到消息,必须先用B的公钥解签,成功了(这里只能证明,这个东西是B发送的),然后再用自己

                    的私钥解密(因为B用A的公钥加密,所以A肯定可以用自己的私钥解开),这样就完美了

注意:非对称加密虽然安全,但性能却比对称加密要差很多,如果既想保证安全又提高效率,那么两者相结合是一个不错的办法,所以把对称加密用到的私钥Y,先用非对称加密方式传输(这里不会暴露私钥Y),等安全获得到对称私钥后,A 和 B 的通信再都用 这个对称私钥Y进行加解密,效率得到解决(Https的加密就是这样一个过程,认证过程用非对称加密获取对称私钥Y,之后的内容传输就改为对称传输,如果有人问Https加密是对称还是非对称,可以这样回答)。

 

对称秘钥是可以用户双方自定义的

但是非对称的公-私钥可不能自定义,公钥和私钥是相对应的。

 

posted @ 2020-10-30 16:49  _Eternity味道  Views(481)  Comments(0Edit  收藏  举报