时间:2017年4月10日星期一
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学示例源码:https://github.com/zccodere/s...
个人学习源码:https://github.com/zccodere/s...

第一章:概述

1-1 Java实现Base64加密概述

Java加、解密基础与Base64算法

应用示例:邮箱发送邮件

Base64严格意义上来说,并不算一个加解密的算法。通常也会把它作为加解密的方法来使用。

包含的内容

安全和密码
常用安全体系介绍
密码分类及java的安全组成

JDK相关包及第三方扩展

Base64算法介绍

如何学习

掌握用法
深入理解
不断实践
反复总结

再次深入理解与实践
一些资源

http://www.google.com
http://zh.wikipedia.org
其它…

1-2 密码的常用术语

密码的常用术语(一)

明文:待价密的信息。
密文:经过加密后的明文。
加密:明文转为密文的过程。
加密算法:明文转为密文的转换算法。
加密密钥:通过加密算法进行加密操作用的密钥。
解密:将密文转为明文的过程。
解密算法:密文转为明文的算法。
解密密钥:通过解密算法进行解密操作用的密钥。

密码常用术语(二)

密码分析:截获密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程。
主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进程欺骗。(对密文具有破坏作用)
被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成。

密码常用术语(三)

密码协议:也称为安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
密码系统:指用于加密、解密的系统。
柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。现代密码学设计的基本原则。

1-3 密码分类

加解密基础

密码分类
Java安全组成
相关java包、类
第三方java扩展

密码分类,按时间分

古典密码:以字符为基本加密单元。
现代密码:以信息块为基本加密单元。

密码分类,按保密内容算法

clipboard.png

密码分类,密码体制

clipboard.png

密码分类,明文处理方法

分组密码:将要加密的明文分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。多用于网络加密。
流密码:也称序列密码。指加密时每次加密一位或者一个字节明文。

散列函数(hash函数或消息摘要函数)

主要作用:散列函数用来验证数据的完整性。
特点:长度不受限制、哈希值容易计算、散列运算过程不可逆

散列函数相关的算法

消息摘要算法MD5等
SNA:安全散列算法
MAC:消息认证码算法

数字签名

主要是针对以数字的形式存储的消息进行的处理

1-4 OSI与TCP/IP安全体系

OSI安全体系

clipboard.png

TCP/IP安全体系

clipboard.png

安全服务与安全机制

clipboard.png

1-5 java安全组成、包及第三方扩展

Java安全组成

JCA(Java Cryptography Architecture)
JCE(Java Cryptography Extension)
JSSE(Java Secure Socket Extension)
JAAS(Java Authentication and Authentication Service)

相关java包、类

java.security
    --消息摘要
javax.crypto
    --安全消息摘要,消息认证(鉴别)码
java.net.ssl
    --安全套接字

第三方java扩展

Bouncy Castle
    --两种支持方案:1)配置;2)调用
Comons Codes
    --Apache
    --Base64、二进制、十六进制、字符集编码
    --Url编码/解码

第二章:Base64算法

2-1 实现Base64算法

应用

Base64算法
消息摘要算法
对称加密算法
非对称加密算法
数字签名算法
数字证书
安全协议

Base64算法

clipboard.png

2-2 Base64算法应用场景

应用场景:e-mail、密钥、证书文件

Base64算法

产生:邮件的“历史问题”
定义:基于64个字符的编码算法
关于RFC 2045
衍生:Base16、Base32、Url Base64
Base64算法与加解密算法

64个字符

clipboard.png

代码实现

package com.myimooc.security.base64;

import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

/**
 * Base64加密演示
 * Created by ZC on 2017/4/10.
 */
public class DemoBase64 {
    /** 待加密字符串 */
    private static String src="imooc security base64";

    public static void main(String[] args){
        jdkBase64();
        commonsCodesBase64();
        bouncyCastleBase64();
    }

    /**
     * 通过JDK实现Base64加密
     */
    public static void jdkBase64(){
        try {
            BASE64Encoder encoder = new BASE64Encoder();
            String encode = encoder.encode(src.getBytes());
            System.out.println("encode:"+encode);

            BASE64Decoder decoder = new BASE64Decoder();
            System.out.println("decode:"+new String(decoder.decodeBuffer(encode)));

        } catch (IOException e) {
        }
    }

    /**
     * 通过commons codec实现Base64加密
     */
    public static void commonsCodesBase64(){
        byte[] encodeBytes = Base64.encodeBase64(src.getBytes());
        System.out.println("encode:"+new String(encodeBytes));

        byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
        System.out.println("decode:"+new String(decodeBytes));
    }

    /**
     * 通过Bouncy Castle实现Base64加密
     */
    public static void bouncyCastleBase64(){
        byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
        System.out.println("encode:"+new String(encodeBytes));

        byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
        System.out.println("decode:"+new String(decodeBytes));
    }

}

妙手空空
1.3k 声望370 粉丝

博观而约取,厚积而薄发