内容简介
1.keystore:数字证书
2.对称加密
3.非对称加密
4.消息摘要
5.https :
6.破解加密算法:简单的加密算法
一.简单的加密算法
1.凯撒加密算法:
凯撒大帝要给下属军官传递命令,为了防止被截获,于是大帝发明了凯撒加密算法;
2.原理:
A--->B 根据ASCIN码表
3.手写一个凯撒加密算法
String input = “HeiMa”;
char [] charArray = input.toCharArray();
遍历拿到每一个字符,并转成int类型
对转成int类型的字符进行位移操作
4.频度分析法破解简单凯撒算法
二.对称加密
1.DES AES的原理
底层对Byte位进行操作
Des 密码长度8,64位,56指有效参与运算加密的只有7位,7 X 8 = 56;
Aes 密码长度16,128位,
Rsa
2.序列化工具类
将秘钥存储到文件 或者从文件读取秘钥
![des01](https://img-blog.csdn.net/20170511213609493?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![des02](https://img-blog.csdn.net/20170511213946936?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3.制定随机生成不变的秘钥
![徐大大的博客](https://img-blog.csdn.net/20170511214009531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4.指定秘钥.不要生成,也不用储存到文件
![徐大大的博客](https://img-blog.csdn.net/20170511214047657?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5.AES加密
1.创建Cipher对象
Cipher cipher = Cipher.getInstance(AES);
2.初始化 Cipher对象,告知工作模式
Cipher.init(Cipher.ENCRYPT_MODE,key)
3.进行加密
![徐大大的图片](https://img-blog.csdn.net/20170511214114229?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6,加密解密三部曲
1.创建cipher对象
2.初始化cipher对象,设置模式(加密还是解密),秘钥 key
3.进行加密或解密操作cipher.doFind()
7.CBC模式下需要添加参数
算法/工作模式/填充模式
![徐大大的图片](https://img-blog.csdn.net/20170511214137605?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
三.非对称加密
1.RSA
2.创建一个类RsaDemo-------Java工程
从主函数进入
3,Rsa三个 模式
![这里写图片描述](https://img-blog.csdn.net/20170511214228449?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4.三部曲
1.创建cipher对象
![这里写图片描述](https://img-blog.csdn.net/20170511214254621?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.生成公钥和私钥,首先拿到秘钥生成器
![这里写图片描述](https://img-blog.csdn.net/20170511214314394?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3.初始化cipher对象,设置模式-------私钥加密
![这里写图片描述](https://img-blog.csdn.net/20170511214334957?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4.打印输出------用Base64进行包装一下,防止出现乱码
![这里写图片描述](https://img-blog.csdn.net/20170511214411286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5.公钥解密
![这里写图片描述](https://img-blog.csdn.net/20170511214421732?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5.Rsa加密特点
1.Rsa加密每次加密长度不能超过117字节,即不能等于或大于118字节;
2.解决方案:分段加密 每次只加密117个字节;
3.一个中文在 utf-8编码中占3个字节,在gbk编码中占2个字节;
4.Rsa每次解密不能超过128个字节;
5.解决方案,分段解密
解密的时候,创建一个偏移量即int offset =128;
创建一个临时数组,一个字节数组输出流,将cipher对象doFinal得到的数据储存,并写进一个输出流;
分别判断一下是不是完整块
四.消息摘要
一.md5
1.初始化消息摘要对象
MessageDigest md5 = MessageDigest.getInstance(“MD5”);
2.消息摘要加密结果一般用16进制显示
3.消息摘要中 16 ---32 ---128 各代表什么意思?
16:代表md5加密后长度16个字节
32:加密后的结果转成16进制的字符串长度是32;
128:MD5加密后的字节所占的位数 16字节 X 8位 = 128位
二.SHA
1.sha值结果一般都是20个字节(160个比特位),转成16进制后,长度是40个字符;
五.数字签名
1.签名用私钥,校验用公钥
2.数字签名就是 : 消息摘要 + 非对称加密
3.使用步骤
1.创建数字签名对象
2.拿到公钥和私钥
3.用私钥初始化签名
4.开始签名,得到签名后的数组
5.用Base64包装后打印输出
Sign 签名 Verify 校验
4.数字签名具体代码
![这里写图片描述](https://img-blog.csdn.net/20170511214515599?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
5.数字签名分析图
![这里写图片描述](https://img-blog.csdn.net/20170511214529193?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6.学会命令行生成keystore,导出证书
六.Https编程
1.介绍
2.https受信任管理器
![这里写图片描述](https://img-blog.csdn.net/20170511214600202?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZVh1ZGFkYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3.没有认证的解决方案
关联一下证书就可以,详情见代码