java:密码学

一、编码算法

不是加密和解密,为了数据在网络间更方便的传输而产生/本地存储字节数组

1.1 base64

由A-Z a-z 0-9 + /共64个字符组成,去掉I i o O + /即base58
对照表:
在这里插入图片描述

注意:base64以3个字节为一组,如果最后一组不够3个字节补=

1.2 url编码

application/x-www-from-urlencoded:为了防止中文乱码

1.3 字节数组与16进制互转(见代码)

二、摘要算法

2.1 定义

又叫Hash算法,散列函数、数字摘要、消息摘要。它是一种一种单向算法,用户可以通过hash算法对目标信息生产一段特别的唯一hash值,但不能通过这个hash值重新获得目标信息。

2.2 应用场景

  • 密码、信息完整性校验、数字签名

2.3 常见算法(实现见code demo)

  • MD5:结果占128位==>16个byte==>转成16进制字符后是32个
    eg:1111 1111 --> ff
  • SHA:安全散列算法
    • sha-256==>转成16进制字符后是64个
    • 其他sha-0、sha-1、sha-512

MAC:消息认证码,是一种带有密钥的hash函数。

三、对称加密

3.1 定义

也叫单密钥加密。即加密和解密的过程用的是相同的密钥,但相比非对称加密,因为只有一把密钥,因此速度更快,更适合大文件加解密。

3.2 常见算法

  • DES :data encryption standard 已经过时
  • AES:advanced encryption standard 替代DES
  • 其他:3DES,Blowfish,IDEA,RC4,RC5,RC6

3.3 分类

  • 分组加密,又叫块加密
  • 序列加密

3.4 块加密常用的加密模式

  • ECB

定义:electronic code book,电码本模式,将整个明文分成若干相同的小段,然后对每一段进行加密。
特点:每段之间互不依赖,同样的明文总是生成同样的密文。

在这里插入图片描述

  • CBC模式

定义:cipher block chaining 密文分组链模式,所谓链,即密文分组之间像链条一样互相连接在一起,先将明文切成若干小段,然后每一段与上一段的密文段(第一个块没有上一个密文段,使用的initialization vector,初始化向量 IV)进行运算后,再与密钥进行加密。

特点:串行处理,同样的明文每次生成的密文不一样

在这里插入图片描述

3.5 块加密常用的填充模式

对于固定的加密算法,每个块有固定大小(blockSize),比如8个byte,明文分块后,加密前需要保证对最后一个块的大小为8个byte,如果不够则使用特定数据填充。

  • NoPadding:不自动填充
    des时要求原文必须时8个字节的整数倍,aes时必须是16字节的整数倍

  • PKCS5Padding(限制了块大小为8个byte的PKCS7Padding)/PKCS7Padding

  • PKCS:public-key-cryptography standards 公钥密码学标准

四、非对称加密

  • 4.1 定义

加密和解密用的是两个不同的密钥,(public key 和 private key)公钥可以给任何人,私钥总是自己保留。

  • 4.2 为什么会出现?

对称加密使用相同的密钥,但对不同的原始内容加密采用不同的密钥,导致密钥数量巨大 难以维护

  • 4.3 常见算法

  • RSA

  • 其他如:ECC Diffie-Hellman EI Gamal DSA

  • 4.4 应用场景

  • 加解密

可以用公钥加密,私钥解密,也可以私钥加密,公钥解密

  • 数字签名

发送方A:原始内容–>通过摘要算法获取原始内容的摘要str1–>把str1用发送方的私钥加密–>数字签名。
接收方B:用发送方的公钥验证签名并解密–> 得到原始内容–>对原始内容进行摘要算法str2–>比较str1 == str2(保证未被篡改)

注意:不是用公钥hash 如果用公钥,别人没你的私钥,怎么验证呢?
签名是先进行摘要再进行rsa,所以在摘要算法一定的情况下,签名后得到的字符串长度总是一定的

目的:验证发送方的身份,校验完整性。

  • 数字信封

对称加密的密钥分发不安全–>发送方用接收方的公钥加密之–>接收方再用自己的私钥解密之

注意:为什么会有分发密钥呢?不是约定好的嘛?密钥会随着数据一起发送给接收方也会被拦截

  • 数字证书

Q:有了数字签名就可以证明发送者的身份了,还会有什么问题?
A:A服务端,B客户端,A给B发消息。B这里存储的A的公钥被换成了C的公钥,A发送的信息也换成了C的私钥生成的签名。现在需要一种手段证明’B这里存储的A的公钥’确实是A的公钥。
在这里插入图片描述

  • ca
    certificate authority,使用pk(public key infrastructure)技术的机构,也可以内部搭建,使用ejbca。

  • ca根证书

Q:B除了存储A的数字证书对于的ca公钥,假设还要N个人给B发信,B都有保存他们的数字证书CA公钥吗?
A:不需要,CA认证中心可以个B一份‘根证书’,里面存储的CA公钥可以验证所以CA分中心颁发的数字证书。

案例代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值