前言
最近由于项目进度需要,项目越来越多,深度也加深,后续的用户权控的开发要提上议程了。权控这块,对安全的考虑还是要有的。看了下主流的权控相关的做法,像 shiro 、 jwt 等都会涉及到一些加密算法的知识,为了更好地开展项目,所以抽时间系统学习和梳理下 java 在关于安全加密方面的知识,同时做下学习记录,后续备用。
一、加解密基础
1、加密常用术语
明文:待加密信息;
密文:经过加密后的明文;
加密:将明文转为密文的过程;
加密算法:明文转化为密文的转换算法;
加密密钥:通过加密算法进行加密操作用的密钥;
解密:将密文转为明文的过程;
解密算法:密文转化为明文的转换算法;
解密密钥:通过解密算法进行解密操作用的密钥;
密码分析:接货密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程;
主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗;(对密文具有破坏作用)
被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击;(对密文没有破坏作用)
密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成;
密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
密码系统:指用于加密、解密的系统;
柯克霍夫原则:数据的安全即将于密钥而不是算法的保密。既系统的安全取决于密钥,对密钥保密,对算法公开。(现代密码学设计的基本原则)
2、密码分类
按时间分:
古典密码:一字符为基本加密单元;
现代密码:一信息快为基本加密单元;
按保密内容分:
受限制算法:算法的保密性基于保持算法的密码,军事领域,古典密码;
基于密钥算法:算法的保密性基于对密钥的保密,,现代密码;
按密码体制分:
对称密码:单钥密码或私钥密码,指加密密钥与解密密钥相同;
非对称密码:双钥密码或公钥密码,指加密密钥和解密密钥不同,密钥分公钥、私钥;
对称密码算法:单钥密码算法或私钥密码算法,指用于对称密码的加密、解密算法;
非对称密码算法:双钥密码算法或公钥密码算法,指用于非对称密码的加密、解密算法;
按照明文处理方法分:
分组密码:指加密时将明文分成固定长度的组,用同一密钥和算法对每一块加密,输入的也是固定长度的密文。多用于网络加密。
流密码:也称序列密码。指加密时每次加密以为或者一个字节明文。
3、散列函数
散列函数用来验证数据的完整性;
特点:长度不受限制,哈希值容易计算,散列运算过程不可逆;
相关算法:消息摘要算法MD5、安全散列算法SHA、消息认证码算法MAC等;
4、数字签名
主要是针对一数字的形式存储的消息进行的处理;
数字签名会产生一种带有操作者身份信息的编码;
执行身份签名的主体叫签名者;
签名过程中使用的算法叫签名算法;
二、OSI 与 TCP/IP 安全体系
1、OSI 安全体系
Open System Interconnection(开放式通信系统)
网络通信:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;
安全机制:加密机制、数字签名机制、访问控制机制、数据完整性机制、认证机制、业务流填充机制、路由控制机制、公正机制;
安全服务:认证(鉴别)服务、访问控制服务、数据保密性服务、数据完整性服务、抗否认性服务;
2、TCP/IP 安全体系
网络通信:网络接口层、网络层、传输层、应用层; 安全体系结构:网络接口层安全、网路层安全、传输层安全、应用层安全;
3、对应关系
OSI 与 TCP/IP 网络通信的对应关系:
OSI | TCP/IP |
---|---|
应用层 | 应用层 |
表示层 | 应用层 |
会话层 | 应用层 |
传输层 | 传输层 |
网络层 | 网络层 |
数据链路层 | 网络接口层 |
物理层 | 网络接口层 |
安全服务与安全机制的对应关系:
安全服务 | 安全机制 |
---|---|
抗否认性服务 | 公正机制 |
数据完整性服务 | 数据完整性机制 |
数据保密性服务 | 加密机制、业务流填充机制 |
访问控制服务 | 访问控制机制、路由控制机制 |
认证(鉴别)服务 | 认证机制、数据签名机制 |
三、Java 安全组成、jdk 相关包及第三方扩展
1、java 安全组成
java加密体系结构JCA(Java Cryptography Architecture)——消息摘要、数据签名等
java加密扩展JCE(Java Cryptography Extension)——DES、AES、RSA等
java安全套接字扩展包JSSE(Java Secure Socket Extension)——基于SSL的加密功能,网络传输等
java鉴别与安全服务JAAS(Java Authentication and Authentication Service)——用户登录和权限控制等
修改 Java JDK 的加密实现提供方:
文件路径:jdk/jre/lib/security/java.security
security.provider.1 = sum.security.privider.Sun
Secuity.addProvider 或者 insertProviderAt
2、相关 java 包、类
java.security 提供java安全框架相关的类和接口 - 消息摘要
javax.crypto 提供java安全加解密操作相关的类和接口 - 安全消息摘要,消息认证(鉴别)码
java.net.ssl 提供java安全套接字相关的类,基于网络的加解密 - 安全套接字(HttpsURLConnection、SSLContext)
3、第三方 java 扩展
Commons Codec
Apache
Base64、二进制、十六进度、字符集编码
Url 编码/解码
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>
Bouncy Castle
两种支持方案:1)配置;2)调用;
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.62</version>
</dependency>
主要知识点来源于慕课慕课网上 moocer老师 提供的 java 加密系列教程。 原创不易,如需转载,请标明出处!

发表评论