明文:准备加密的信息
加密:把明文处理为密文的过程
加密算法:具体实现明文转为密文的算法
加密密钥:通过加密算法进行加密操作需要的密钥
密文:被加密的明文
解密:将密文转为明文的过程
解密算法:具体实现密文转为明文的算法
解密密钥:通过解密算法进行解密操作需要的密钥
密码分析、主动攻击、被动攻击、密码体制(五部分)、密码协议(安全协议)、密码系统、柯克霍夫原则(现代密码学设计的基本原则)
时间:古典密码(以字符为基本加密单元)、现代密码(以信息块为基本加密单元)
保密内容:受限制算法(算法保密)(属于古典密码)、基于密钥算法(算法公开)(属于现代密码)
密码体制:对称密码(加解密密钥相同)、非对称密码(加密密钥和解密秘钥不同)
明文处理方法:分组密码(对加密内容分组)、流密码(每次只加密一位或一字节密码)
消息摘要算法(MD类,如MD5)、安全散列算法(SHA)、消息认证算法(MAC)
具体内容见我的另一篇文章
引用:ISO/OSI网络体系结构和TCP/IP协议模型
引用:OSI与TCP IP安全体系参考模型
JCA(Java Cryptography Architectrue)Java加密体系 (API)
提供基本的加密框架,如(消息摘要、数字签名)
JCE(Java Cryptography Extension)Java加密拓展 (API)
在JCA的基础上提供扩展,提供更多加密算法和密钥管理的功能
JSSE (Java Secure Socket Extesion)Java安全套接字拓展
提供基于SSL的加密功能,主要用于网络传输的过程中
JAAS(Java Authentication and Authentication Service)Java认证和认证服务
提供了在Java这个平台上进行用户身份验证的能力
引用:Java安全组成、包及第三方扩展
java.security:提供消息摘要算法,源码可见
javax.crypto:提供安全消息摘要、消息认证(鉴别)码
java.net.ssl:安全套接字,和网络传输相关的加解密操作,常用类(HttpsURLConnection、SSLContext)
Bouncy Castle:开源,两种使用方式(配置、API调用)
Commons Codec:开源,Apache提供,Base64,URL编码解码,字符集编码
Base64算法的应用场景:E-Mail、密钥、证书文件
产生的历史原因:邮件的“历史问题” 当时,邮件在传输一些非ASCLL码的值,在一些不同的网关或者网络会出现问题。
定义:基于64个字符的编码算法 (RFC 2045关于Base算法的基本规范)
Base64就是基于英文字母(大小写各26个共52个)+数字(10个)+两个特殊字符(+ /)来实现编码替换的加密方式。它并非是一个严格意义的加解密的算法,只是一种编码的替换格式,而且对应的编码和值是公开的,比较容易破解,违反柯克霍夫原则。如果加上一些扰码,安全性会稍高一些。
在Java中的实现方式:
—JDK(不推荐使用)
使用JDK进行Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder和BASE64Decoder类。这个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。如果在Eclipse和MyEclipse中直接使用,却找不到该类。
解决方法:解决Eclipse中无法直接使用Base64Encoder的问题
package practice;
public class Base64Test {
private static String str = "test text";
public static void main(String[] args) {
jdkBase64();
}
public static void jdkBase64() {
BASE64Encoder encoder = new BASE64Encoder();
String encoder = encoder.encode(str.getBytes());
System.out.println(encoder);
BASE64Decoder decoder = new BASE64Decoder();
System.out.println(new String(decoder.decodeBuffer(encoder)));
}
}
—Commons Codec
提前导入的.jar包:commons-codec-1.10.jar
下载jar包
package practice;
import org.apache.commons.codec.binary.Base64;
public class Base64Test {
private static String str = "test text";
public static void main(String[] args) {
commonsCodecBase64();
}
public static void commonsCodecBase64() {
String encode = new String(Base64.encodeBase64(str.getBytes()));
System.out.println(encode);
String decode = new String(Base64.decodeBase64(encode));
System.out.println(decode);
}
}
—Bouncy Castle
提前导入的.jar包:bcprov-jdk15on-149.jar
package practice;
import org.bouncycastle.util.encoders.Base64;
public class Base64Test {
private static String str = "test text";
public static void main(String[] args) {
bouncyCastleBase64();
}
public static void bouncyCastleBase64() {
String encode = new String(Base64.encode(str.getBytes()));
System.out.println(encode);
String decode = new String(Base64.decode(encode));
System.out.println(decode);
}
}
封装起来:(用着舒服)
package pers.slvayf.aio.verification;
import org.bouncycastle.util.encoders.Base64;
/******************************************************************************************
* 2018.10.25
* Release
* By slvayf.
* Eclipse Java Oxygen & JDK-9.0.4 & bcprov-jdk15on-149.jar
* Base64文本预处理工具类
* 利用 bouncycastle扩展类为系统提供Base64算法能力,对参数文本进行Base64处理并return
* ****************************************************************************************
*/
public class Base64Tools {
public static String bouncyCastleEn(String str) {
String encryption = new String(Base64.encode(str.getBytes()));
return encryption;
}
public static String bouncyCastleDe(String str) {
String decrypt = new String(Base64.decode(str));
return decrypt;
}
}
调用一下:(静态方法,直接调用就行)
// 加密
String encryption = Base64Tools.bouncyCastleEn(str);
// 解密
String decryptGet = Base64Tools.bouncyCastleDe(str);