数据加解密基础知识介绍,及Java实现Base64加密(详细)

  • 加密流程涉及的一些关键词:

明文:准备加密的信息

加密:把明文处理为密文的过程

加密算法:具体实现明文转为密文的算法

加密密钥:通过加密算法进行加密操作需要的密钥

密文:被加密的明文

解密:将密文转为明文的过程

解密算法:具体实现密文转为明文的算法

解密密钥:通过解密算法进行解密操作需要的密钥

  • 其他关键词:

密码分析、主动攻击、被动攻击、密码体制(五部分)、密码协议(安全协议)、密码系统、柯克霍夫原则(现代密码学设计的基本原则)

  • 密码分类:

时间:古典密码(以字符为基本加密单元)、现代密码(以信息块为基本加密单元)

保密内容:受限制算法(算法保密)(属于古典密码)、基于密钥算法(算法公开)(属于现代密码)

密码体制:对称密码(加解密密钥相同)、非对称密码(加密密钥和解密秘钥不同)

明文处理方法:分组密码(对加密内容分组)、流密码(每次只加密一位或一字节密码)

  • 散列函数: 单向函数,验证数据完整性(长度不受限制、哈希值容易计算、运算过程不可逆)

消息摘要算法(MD类,如MD5)、安全散列算法(SHA)、消息认证算法(MAC)

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

具体内容见我的另一篇文章

  • OSI与TCP/IP安全体系:

引用:ISO/OSI网络体系结构和TCP/IP协议模型

引用:OSI与TCP IP安全体系参考模型

  • Java的安全组成

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安全相关的包:

java.security:提供消息摘要算法,源码可见

javax.crypto:提供安全消息摘要、消息认证(鉴别)码

java.net.ssl:安全套接字,和网络传输相关的加解密操作,常用类(HttpsURLConnection、SSLContext)

  • Java安全相关第三方扩展

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);

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值