Java加密算法概述

Java 加密算法

1. 凯撒密码

一种古老的加密技术,它的基本思想是:通过把字母移动一定的位数来实现加密和解密。

例如:ABC 右移3位 DEF。

2. 对称加密

2.1 概述

对称加密的意思就是:加密和解密都是用的同一个key。

主要有:DES、3DES(DESede)、 AES、Blowflsh

2.2 对称加密常用的数学运算

对称密码中有几种常用的数学运算。

移位和循环移位

移位就是将一段数码按照规定的位数整体性的左移和右移。

例如:对十进制数 12345678 循环右移1位:81234567,循环左移1位:23456781。

置换

就是将数码中的某一位的值根据置换表的规定,用另一位代替。

扩展

就是将一段数码扩展成比原来位数更长的数码。

压缩

就是将一段数码压缩成比原来位数更短的数码。

异域

简单的记为:无进位相加。

总结:这些运算主要是对比特位进行操作,共同目的就是尽可能的把明文数码打乱,从而加大破译的难度。

单位换算

在这里插入图片描述

加密算法分类

在这里插入图片描述

2.3 base64 编码

  • base64 不是加密算法 是可读性算法
  • base64 目的不是保护我们的数据,目的是可读性
  • base64 是由64个字符组成 大写A-Z,小写a-z,数字0-9,两个字符+和/
  • base58 一般用于比特币里面的一种编码方式
  • base58里面没有数字0,没有字母o,没有大写字母I和小写字母i,没有+和/ 一共58个字符

base64原理:

三个字节为一组,一个字节是8位,一共24位,base64将三个字节转换为4组,每组6位。

一个字节是8位,缺少2位,在高位进行补0。

这样做的好处,base64取后面6位。前面的2位,会把它去掉,可以把base64控制到0-63之间。

在base64里面3个字节为一组,如果不够三个字节,需要用 = 补齐。

public class TestBase64 {
	public static void main(String[] args) {
        System.out.println(new String(Base64.getEncoder().encode("1".getBytes())));
        System.out.println(new String(Base64.getEncoder().encode("12".getBytes())));
        System.out.println(new String(Base64.getEncoder().encode("123".getBytes())));
    }

}

2.4 DES算法

DES 是 Data Encryption Standard(数据加密标准)的缩写。由 IBM 公司研制的一种对称密码算法。DES 是一个分组加密算法,典型的DES以64位分组秘钥对数据进行加密,加密和解密用的是同一个算法。它的秘钥总长度是64位,其中前56位参与运算,8位作为校验码,不参与加密运算。秘钥可以是任意的56位的数。其保密性依赖于秘钥。

  • 需要一个秘钥
    • 秘钥长度64bit,8字节
    • 数据分组,每组数据8字节

乱码原因:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBvl83pJ-1608197665530)(C:\Users\Dongbixi\AppData\Roaming\Typora\typora-user-images\1607958776911.png)]

2.5 3DES算法

3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对3DES数据进行三次加密。

处理流程:加密 -> 解密 -> 加密。

  • 需要3个秘钥

    • 每个秘钥8字节,一共24字节
    • 数据分组,每组是8个字节
  • 加密情况分析

    • 三个秘钥不同
      • 数据被加密三次
    • 秘钥1,2相同,和3不同
      • 被秘钥3加密一次
    • 秘钥1,3相同,和2不同
      • 使用两个秘钥加密三次
    • 秘钥2,3相同,和1不同
      • 使用秘钥1加密一次
    • 秘钥1,2,3相同
      • 数据被加密一次,和DES效果一样

2.6 AES算法

AES(Advanced Encryption Standard)

AES分组长度为128比特。有128,192,256比特三种。

2.7 加密模式

ECB
  • ECB : Electronic Codebook 电子密码本,把需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。

  • Java中默认的加密模式

优点:可以并行处理数据

缺点:同样的原文生成同样的密文,不能很好的保护数据

CBC
  • CBC:Cipher-block chaining,密码块连接,每个明文块先与前一个密文块进行异或后,再进行加密。在这种模式中,每个密文块都依赖于它前面的所有明文块。
  • CBC模式下,需要创建初始化向量iv。

优点:同样的原文生成的密文不一样

缺点:串行处理数据

2.8 填充模式

NoPadding
  • 不填充。
  • 在DES下,原文长度必须是8byte的整数倍。
  • 在AES下,原文长度必须是16byte的整数倍。
PKCS5Padding
  • Java 中默认的填充模式。

  • 数据块的大小为8位,不够就补足。

3. 非对称加密

3.1 简介

  • 非对称加密算法,必须要有两个秘钥,一个公钥,一个私钥。

  • 如果是公钥加密,必须要私钥解密。

  • 如果是私钥加密,必须要公钥解密。

3.2 数字签名

数字签名:公钥数字签名,只有信息的发送者,才能产生别人无法伪造的一段数字串,类似于写在纸上面的普通物理签名。

数字证书

CA (Certificate)认证中心,采用PKI(Public Key Infrastructure)公开密钥基础架构技术,专门提供网络认证服务。CA 机构必须是可信任的单位团体。

数字证书如何生成?

在这里插入图片描述

服务器把公钥A发送给认证机构加密。认证机构再把数字签名A、公钥A打包成证书返回给服务器。

https 网页加密

首先客户端向服务端发送请求。

服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。

客户端的“证书管理器”,有“受信任的根证书颁发机构”列表。客户端会根据这张列表。查看解开数字证书的公钥是否在列表之内。

在这里插入图片描述

如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器就会发出警告。

如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。

受信任的根证书颁发机构

计算机系统安装的时候预装了知名CA机构的根证书,这里包含了CA机构的公钥,浏览器就会对服务器的证书进行验证。

证书使用
  • 所有的网站都使用https
  • https = http + ssl
  • ssl = Secure Socket Layer,是一个通讯协议,通讯的过程中使用了数字证书
https通信过程
  • 所有的通信不再传输公钥,而是传输数字证书。
  • 证书里面包含了公钥,可以由CA机构认证。
1. 网站提供者会自己生成公钥私钥。
   - 也可以不自己生成,全部由CA帮助生成
   
2. 服务器提供者将公钥发送给选择的CA机构。

3. CA机构也有自己的私钥公钥。CA使用自己的私钥对服务器的公钥进行签名。
   - 还有一些其他辅助信息(发行机构,主题,指纹)
   - 公钥
   - 签名

   CA向服务器颁发一个数字证书

4. 当用户访问服务器的时候,服务器会将CA证书发送给客户。

5. 在客户的浏览器中,已经随着操作系统预装了知名CA机构的根证书,这里面包含了CA机构的公钥,浏览器就会对服务器的证书进行验证。

6. 如果验证成功,说明服务器可靠,可以正常通信(小锁头)。

7. 如果验证失败,显示(Not Secure),提示Warning。

8. 证书有效时,浏览器会将自己支持的对称加密算法(`DES`, `3DES`, `AES`)发送给服务器,生成随机秘钥(对称),使用服务器的公钥,对上述信息加密。发送给服务器。

9. 服务器选择一个加密算法,使用对称秘钥加密消息,发送给客户端。

10. 双方达成一致,接下来通信转换为对称加密。
windows下查看证书

打开CMD输入:certmgr.msc

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUIZeJt7-1608205385985)(C:\Users\Dongbixi\AppData\Roaming\Typora\typora-user-images\1608200490530.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值