常见数据加密与解密方式

目录

一、对称加密

1、凯撒加密算法:位偏移

2、byte 和 bit

3、常见的对称加密算法

4、工作模式和填充模式

5、对称加密应用实战

二、非对称加密

6、非对称加密算法

7、非对称加密RSA的分段加密

8、非对称加密RSA的分段解密

9、RSA非对称加密/解密保存秘钥对

10、非对称加密RSA特点

三、消息摘要

11、消息摘要算法介绍

12、消息摘要MD5的使用

13、获取文件MD5的值 

14、消息摘要sha1和sha256的使用

15、消息摘要应用实战

四、数字签名

16、数字签名

17、数字签名实战

五、加密与解密总结

18、加密算法总结

19、加密算法应用注意点


一、对称加密

1、凯撒加密算法:位偏移


2、byte 和 bit

    1 byte = 8 bit
    中文当中utf-8编码每一个中文占用3个字节,24位;若是GBK编码,则占用2个字节,即16位;


3、常见的对称加密算法


    1)DES(Data Encryption Standard,数据加密标准)加密之后,密文的长度的8的整数倍,秘钥长度是8字节(password),即64bit位

    2)AES(Advanced Encryption Standard,高级加密标准)加密和解密,秘钥长度是16字节,即128bit位

    3)对称加密密钥长度分析:

    4)对称加密的特点:加密计算量小、速度块,适合对大量数据进行加密的场景。(记住这个特点,实际使用是会用到的)

4、工作模式和填充模式

          工作模式和填充模式的使用:默认工作模式和填充模式使用的是ECB/PKCS5Padding

    CBC模式必须添加一个额外的参数
    NoPadding填充模式:
        -DES:明文必须是8个字节的整数倍
        -AES:明文必须是16个字节的整数倍

数据库配置加密 ?添加一个依赖

5、对称加密应用实战

    算法:DES、AES

    javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
    怎么解决这个问题?

二、非对称加密

6、非对称加密算法

    私钥加密,公钥解密;

    公钥加密,私钥(自己的)解密;

非对称加密RSA生成秘钥对:


7、非对称加密RSA的分段加密

    私钥加密和公钥加密的数据字节数不能超过245个字节,否则会出现下述的异常
    javax.crypto.IllegalBlockSizeException: Data must not be longer than 245 bytes

    分段加密思想:
        设置一个常量,表示RSA一次加密的最大字节数245byte;然后将明文字段加密若干次,若待加密的明文的字节数正好是245的整数倍,
        则直接加密完即可;若加密到剩余不足245字节的明文,使用普通方式进行加密即可;

        分段加密用到的类:
            Cipher:加密/解密算法核心类
            ByteArrayOutputStream:字节数组输出流

    Cipher类加密三部曲:
        1)创建Cipher类的对象
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        2)初始化加密/解密的方式:加密、解密
            cipher.init(加密/解密,key);
        3)加密/解密
            doFinal() ---- 完成多部分加密或解密操作,这取决于该密码如何初始化。
            doFinal(byte[] input)  ---- 在单一部分操作中加密或解密数据,或完成多部分操作
            doFinal(byte[] input, int inputOffset, int inputLen) ---- 在单一部分操作中加密或解密数据,或完成多部分操作



8、非对称加密RSA的分段解密

    RSA一次解密的最大字段为?256 Byte

    在解密之前需要使用Base64解码

 

9、RSA非对称加密/解密保存秘钥对 

    每一次的生成的公钥和私钥都是不一样的

    保存方式:
              将生成的私钥和公钥以常量的形式保存起来,
              使用秘钥工厂KeyFactory来创建秘钥工厂对象 kf = KeyFactory.getInstance("算法");

              使用工厂对象 kf 来生成公钥和私钥

              其中私钥使用PKCS8EncodeKeySpec(参数:KeySpec)编码规范:Only RSAPrivate(Crt)KeySpec and PKCS8EncodedKeySpec supported for RSA private keys

              公钥使用的编码规范 :Only RSAPublicKeySpec and X509EncodedKeySpec supported for RSA public keys

 

10、非对称加密RSA特点

    秘钥对:公钥和私钥
    非对称:公钥加密,私钥解密;私钥加密,公钥解密;
    加密:MAX 245
    解密:MAX 256
    加密解密速度较慢
    公钥互换
    存储秘钥对:存储在常量中

    数字签名:校验数据安全?????HOW!!!

三、消息摘要

11、消息摘要算法介绍

       1)定义:

    Message Digest有称为Digital Digest(数字摘要),它由一个单向Hash加密函数对消息进行作用而产生,消息摘要能够保证了消息的完整性。
    算法:MD5、sha1、sha256

    2)特点:

    *加密后不可逆

    *消息摘要的结果是 固定长度,无论数据有多大,摘要结果都是定长;

    *应用场景:加密用户登录注册登录

    MD5摘要:验证软件是否是正版的、完整的

 

12、消息摘要MD5的使用


    加密的原文:"你那里天气好吗?有没有什么新闻可以当做笑话"
    特殊情况:3ee055f0e75d445cb58524fd7807e4,MD5加密数据长度为:30

    使用:
        1)创建消息摘要的对象
        2)使用对象调用加密方法

 

13、获取文件MD5的值 


    1)使用MD5对文件摘要
       应用场景:文件唯一性、病毒判断

    java.io.FileNotFoundException: spring-framework-5.1.4.RELEASE-dist (系统找不到指定的文件。) ?????
                                                                       文件的后缀名没有写!!!


14、消息摘要sha1和sha256的使用


   消息摘要两部曲:
        1)创建MessageDigest对象
        2)调用digest()方法

   sha1:摘要的结果为20位,转为16进制后为40位

   sha256:摘要的结果为32位,转为16进制后为64位

   MD5:摘要的结果为16位,转为16进制后为32位

 

15、消息摘要应用实战


    常用算法:MD5、sha256

    应用场景:登录/注册用户密码,MD5密文传输

四、数字签名

16、数字签名


    签名四部曲:
         * 1)、创建数字签名对象
         * 2)、初始化签名:必须传递私钥
         * 3)、传入原文
         * 4)、开始签名

    校验签名四部曲:
         * 1)、创建数字签名对象
         * 2)、初始化校验:传入公钥
         * 3)、传入原文
         * 4)、开始校验

    数字签名总结:
        RSA数字签名 = 数字签名

        消息摘要和非对称数字加密的组合

        签名的时候使用私钥

        校验的时候使用公钥

        作用:校验数据的完整性

    数字签名流程图分析:

        

17、数字签名实战


    1)时间戳
        MessageDigestUsage里面的

    2)校验重复登录

五、加密与解密总结

18、加密算法总结


 

    1)对称加密
        算法:DES、AES
        加密速度快
        对称:有秘钥就可以破解
        应用场景:只要可逆都可以使用,比如缓存信息

    2)非对称加密
        RSA
            RSA加密原理基于四个数学知识:“欧互模”:互质定理、欧拉函数、欧拉定理、模反元素
        密钥对:公钥和私钥
        秘钥对不能手动指定,有系统生成
        公钥加密,私钥解密;私钥加密,公钥解密
        公钥互换

            缺点:加密计算量大、速度慢,适合对少量数据进行加密的场景。(刚好和对称加密是反着来的)
    3)消息摘要
        算法:MD5 sha1 sha256
        摘要后不可逆
        摘要后是固定长度,和数据大小无关
        应用场景:不可逆都可以使用,比如用户密码

    4)数字签名
        算法:消息摘要结合RSA,比如SHA256withRSA
        私钥签名、公钥检验
        应用场景:校验户数的完整性,支付宝支付校验支付参数

        传递的仍然是明文,但是在明文中加上数字签名,就可以验证明文数据是否被更改过!

19、加密算法应用注意点

    针对非对称加密加密计算量大、速度慢,只适合对少量数据进行加密这个不足,实际开发中,
    我们如果遇到要对大量数据加密,那就一定要采用RSA+AES加密相结合的方式,

    用AES加密数据,而用RSA加密AES的密钥。

    当然,需要加密的数据如果数据量不大的话,可以直接用RSA加密。
    到这里,我们也可以看出AES对称加密和RSA非对称加密其实是互补的,我们经常把它俩结合起来使用。

你可能感兴趣的:(Java,数据加密与解密,对称加密,非对称加密,数字签名)