1.前言
转专业同学对于密码学可能了解都比较少,在慕课网上看到了一门课,简单讲了一下密码学以及在Java中相关的使用。特此做一个学习笔记
2.密码常用术语
明文:待加密的信息
密文:经过加密后的明文
加密:明文转化为密文的过程
加密算法:明文转化为加密的算法
加密密钥:通过加密算法进行操作加密的密钥
解密:将密文转化为明文的过程
解密算法:将密文转化为明文的算法
解密密钥:通过解密算法进行解密操作的密钥
密码分析:截获密文者通过分析截获的密文从而推断出原来的明文或密钥的过程
主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗。(对密文具有破坏作用)
被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击(对密文没有破坏作用)
密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成。
密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
密码系统:指用于加密、解密的系统。
柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。--现代密码学设计的基本原则
3.密码分类
时间
古典密码:以字符为基本加密单元
现代密码:以信息快为基本加密单元
保密内容算法
受限制算法:算法的保密性基于保持算法的密码
基于密钥算法:算法的保密性基于对密钥的保密
密码体制
对称密码、非对称密码
明文处理方法
分组密码:指加密时将名为分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。多用于网络加密
流密码:也称序列密码。指加密时每次加密一位或者一个字节明文
4.散列函数
散列函数用来验证数据的完整性
特点:长度不受限制、哈希值容易计算
相关算法
消息摘要算法MD5等
SHA --安全散列算法
MAC--消息认证码算法
数字签名
主要针对以数字的形式存储的消息进行的处理
5.OSI(Open System Interconnection)安全体系
- 认证(鉴别)服务:在网络交互过程中,队首发双方的身份及数据来源进行验证。
- 访问控制服务:防止未授权用户非法访问资源,包括用户身份认证和用户权限确认。
- 数据保密性服务:防止数据在传输过程中被破解,泄露。
- 数据完整性服务:防止数据在传输过程中被纂改。
- 抗否认性服务:也称为抗抵赖服务或确认服务。防止发送方与接收双方在执行各自操作后,否认各自所做的操作。
6.Java安全组成
- JCA(Java Crpytography Archtecture)
- JCE(Java CryptoGraphy Extension)
- JSSE(Java Secure Socket Extension)
- JAAS(Java Authentication and Authentication Service)
7.Base64算法
算法实现
- Jdk
- Commons Codec
- Bouncy Castle
应用场景
email、密钥、证书文件
-
产生:邮件的“历史问题”
-
定义:基于64个字符的编码算法
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
public class Base64 {
private static String src = "Imooc security base64";
public static void main(String[] args) {
jdkBase64();
}
public static void jdkBase64() {
try {
BASE64Encoder base64Encoder = new BASE64Encoder();
String decode = base64Encoder.encode(src.getBytes());
System.out.println("decode:" + decode);
BASE64Decoder base64Decoder = new BASE64Decoder();
System.out.println(new String(base64Decoder.decodeBuffer(decode)));
} catch (IOException e) {
e.printStackTrace();
}
}
}