Base64算法:简单的加解密使用(严格来说不算加解密算法)(Base64是对照表的)
一、密码常用术语
1.密码常用术语(一)
(1)明文:待加密信息。
(2)密文:经过加密后的明文。
(3)加密:明文转为密文的过程。
(4)加密算法:明文转为密文的转换算法。
(5)加密密钥:通过加密算法进行加密操作用的密钥。
(6)解密:将密文转为明文的过程。
(7)解密算法:密文转为明文的算法。
(8)解密秘钥:通过解密算法进行解密操作用的秘钥。
2.密码常用术语(二)
(1)密码分析:截获密文者视图通过分析截获的密文从而推断出原来的明文或密钥的过程。
(2)主动攻击:攻击者非法入侵密码系统,通过伪造、修改、删除等手段向系统注入假消息进行欺骗。(对密文具有破坏作用)
(3)被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)
(4)密码体制:由明文空间、密文空间、秘钥空间、加密算法和解密算法等五部分构成。
3.密码常用术语(三)
(1)密码协议:也成安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
(2)密码系统:指用于加密、解密的系统。
(3)柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。——现代密码学设计的基本原则。
一、密码分类
1.时间
古典密码:以字符为基本加密单元。
现代密码:以信息块(多个字符)为基本加密单元。
2.保密内容算法
名称 | 详细说明 | 应用领域 | 类别 |
受限制算法 | 算法的保密性基于保持算法的秘密 | 军事领域 | 古典密码 |
基于密钥算法 | 算法的保密性基于对密钥的保密 |
| 现代密码 |
2.密码体制
名称 | 别名 | 详细说明 |
对称密码 | 单钥密码和私钥密码 | 指加密密钥和解密密钥相同 |
非对称密码 | 双钥密码或公钥密码 | 指加密密钥和解密密钥不同,密钥分公钥和私钥 |
对称密码算法 | 单钥密码算法或私钥密码算法 | 指应用于对称密码的加密、解密算法 |
非对称密码算法 | 双钥密码算法或公钥密码算法 | 指对应于非对称密码的加密、解密算法 |
3.明文处理方法
(1)分组密码:指加密时将名为明文分成固定长度的组,用同意密钥和算法对每一块加密。输出也是固定长度的密文。多用于网络加密。
(2)流密码:也称序列密码。指加密时每次加密一位或者一个字节明文。
三、散列函数
散列函数用来验证数据的完整性(不是用来加解密)
(1)特点:长度不受限制、哈希值容易计算、散列运算过程不可逆;
(2)散列函数相关算法:消息摘要算法MD5等、SHA—安全散列算法、MAC—消息认证码算法;
四、数字签名
主要是针对以数字的形式存储的信息进行的处理。
带有操作者身份信息的编码
五、java安全组成
jca基本加密框架
jce在jca基础上提供一些加密算法,主要在jdk包中
jsse提供基于ssl的加密功能,主要用于网络传输
jaas提供java平台上身份验证的
java安全可以通过第三方配置。可以在jre/bil/security/java.security中配置
security.provider.11 = com.imooc.Provider
六、java相关包、类
java.security -消息摘要
javax.crypto -安全消息摘要,消息认证(鉴别)码
java.net.ssl -安全套接字 HttpsURLConnection、SSLContext
六、第三方java扩展
Bouncy Castle
-两种支持方案:1)配置;2)调用
Commons Codec
-Apache
-Base64、二进制、十六进制、字符集编码
-Url编码/解码
七、j应用
Base64算法
消息摘要算法
对称加密算法
非对称加密算法
数据签名算法
数字证书
安全协议
实例代码:
package com.jl.base64;
import org.apache.commons.codec.binary.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
/**
* base64的三种加解密方式
* jdk 1.8.121
* (1)jdk
* (2)commons codec
* (3)Bouncy castle
* @author jinlong
*
*/
public class Base64tojava {
static String src = "i love code";
public static void main(String[] args) {
jdkbase64();
commomscodesbase64();
}
/**
* 使用jdk进行加解密
*/
public static void jdkbase64(){
Encoder encoder = java.util.Base64.getEncoder();
byte[] encoderbytes = encoder.encode(src.getBytes());
System.out.println("使用jdk进行加密后为:" + new String(encoderbytes));
Decoder decoder = java.util.Base64.getDecoder();
byte[] decoderbytes = decoder.decode(encoderbytes);
System.out.println("使用jdk进行解密后为:" + new String(decoderbytes));
}
/**
* 使用commons-codec的base64 加解密字符串
*/
public static void commomscodesbase64(){
org.apache.commons.codec.binary.Base64 base64 = new org.apache.commons.codec.binary.Base64();
byte[] encoderbytes = base64.encode(src.getBytes());
System.out.println("使用commons-codec进行加密后为:" + new String(encoderbytes));
byte[] decoderbytes = base64.decode(encoderbytes);
System.out.println("使用commons-codecencoderbytes:" + new String(decoderbytes));
}
/**
* 使用boundcyCastle加解密字符串(未找到jar略) 同理commons-codec的base64 加解密字符串
*/
public static void boundcyCastlebase64(){
}
}
应用场景:e-mail、密钥、证书文件。
产生:邮件的“历史问题”
定义:基于64个字符的编码算法
关于RFC2045
衍生:Base16、Base32、Url Base64
Base64算法与加解密算法