Java 实现 Base64 加密。

Java 实现 Base64 加密。



密码常用术语。

明文:待加密信息。
密文:经过加密后的明文。
加密:明文转为密文的过程。
加密算法:明文转为密文的转换算法。
加密密钥:通过加密算法进行加密操作用的密钥。
解密:将密文转为明文的过程。
解密算法:密文转为明文的算法。
解密密钥:通过解密算法进行解密操作用的密钥。
密码分析:截获密文者试图通过分折截获的密文从而推断出原来的明文或密钥的过程。
主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗。(对密文具有破坏作用)。
被动攻击:对一个保密系统采取截获密文井对其进行分析和攻击。(对密文没有破坏作用)。
密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成。
密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务。
密码系统:指用于加密、解密的系统。
柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。——现代密码学设计的基本原则。



密码分类。

密码分类 ~ 时间。
  • 古典密码:以字符为基本加密单位。
  • 现代密码:以信息块为基本加密单元。


密码分类 ~ 保密内容算法。
名称详细说明应用领域类别
受限制算法算法的保密性基于保持算法的秘密军事领域古典密码
基于密钥算法算法的保密性基于对密钥的保密现代密码


密码分类 ~ 密码体制。
名称别名详细说明
对称密码单钥密码或私钥密码指加密密钥与解密密钥相同。
非对称密码双钥密码或公钥密码指加密密钥与解密密钥不同, 密钥分公钥、私钥。
对称加密算法单钥密码算法或私钥密码算法指应用于对称密码的加密、解密算法。
非对称密码算法双钥密码算法或公钥密码算法指对应于非对称密码的加密、解密算法。


密码分类 ~ 明文处理方法。
  • 分组密码:指加密时将名为分成固定长度的组, 用同一密钥和算法对每一块加密, 输出也是固定长度的密文。多用于网络加密。

  • 流密码:也称序列密码。指加密时每次加密一位或者一个字节明文。



散列函数。

散列函数用来验证数据的完整性。

  • 特点。

长度不受限制。
哈希值容易计算。
散列运算过程不可逆。

散列函数相关的算法。

消息摘要算法
MD5 等。

SHA——安全散列算法。
MAC——消息认证码算法。



数字签名。

主要是针对以数字的形式存储的消息进行的处理。



OSI 安全体系。

意为开放式系统互联。国际标准组织(国际标准化组织)制定了OSI(Open System Interconnection)模型。这个模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。1 至 4 层被认为是低层,这些层与数据移动密切相关。5 至 7 层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把数据传送到下一层。

在这里插入图片描述



TCP / IP。

在这里插入图片描述
在这里插入图片描述



Java 安全。

  • JCA。

Java EE Connector Architecture (JCA) is a Java-based tool for connecting application servers and enterprise information systems (EIS) as part of enterprise application integration (EAI) solutions.[buzzword] While JDBC is specifically used to connect Java EE applications to databases, JCA is a more generic architecture for connection to legacy systems. JCA was developed under the Java Community Process as JSR 16 (JCA 1.0), JSR 112 (JCA 1.5) and JSR 322 (JCA 1.6).

JCA(J2EE 连接器架构,Java Connector Architecture)是对 J2EE 标准集的重要补充。因为它注重的是将 Java 程序连接到非 Java 程序和软件包中间件的开发。连接器特指基于 Java 连接器架构的源适配器,其在 J2EE 1.3 规范中被定义。JCA 连接器同时提供了一个重要的能力,即它使 J2EE 应用服务器能够集成任何使用 JCA 适配器的企业信息系统(EIS),大大简化了异构系统的集成。有了 JCA,企业只要购买一个基于 JCA 规范的适配器,就可以将企业应用部署到J2EE服务器上,这样不用编写任何代码就可以实现与 J2EE 应用服务器的集成。JCA 还提供了一个应用服务器和 EIS 连接的标准 Java 解决方案。 JCA 定义了一套标准的接口,用于让连接器把兼容的应用程序服务器无缝的整合起来。同时,定义的另一套标准接口允许客户(或者应用程序服务器的应用程序主机)用一种统一的方法使用连接器。这样,连接器对于跨应用程序服务器就是可移植的,而客户程序成为很轻便的连接器。 JCA 的目标在于企业应用程序集成方面,它提供的标准化体系结构让 J2EE 组件能够对异构 EIS 进行“即插即用”的访问,其中包括 ERP、事务处理、老式数据库系统等。

  • JCE。

The Java Cryptography Extension (JCE) is an officially released Standard Extension to the Java Platform and part of Java Cryptography Architecture (JCA). JCE provides a framework and implementation for encryption, key generation and key agreement, and Message Authentication Code (MAC) algorithms. JCE supplements the Java platform, which already includes interfaces and implementations of message digests and digital signatures. Installation is specific to the version of the Java Platform being used, with downloads available for Java 6, Java 7, and Java 8.

JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。
它提供对对称、不对称、块和流密码的加密支持,它还支持安全流和密封的对象。它不对外出口,用它开发完成封装后将无法调用。

  • JSSE。

In computing, the Java Secure Socket Extension (JSSE) provides a set of packages that enable secure Internet communications. It implements a Java technology version of the Secure Sockets Layer (SSL) and the Transport Layer Security (TLS) protocols. It includes functionality for data encryption,[1] server authentication, message integrity, and optional client-authentication.

JSSE, an optional package for Java versions 1.2 and 1.3, became integrated into version 1.4[clarify].

JSSE,即Java™ Secure Socket Extension 。
SSL(Secure Sockets Layer)是JSSE中的重要的部分。SSL是用的最广泛的实现网络的加密协议。SSL用一个密码处理来提供网络安全通信。SSL是基于标准的TCP/IP socket协议的安全增加用于网络通信,所以SSL是位于传输层和应用程序层之间。最普通的使用SSL的是HTTP(Hypertext Transfer Protocol),用于网络页面。

  • JAAS。

Java Authentication and Authorization Service, or JAAS, pronounced “Jazz”,[1] is the Java implementation of the standard Pluggable Authentication Module (PAM) information security framework.[2] JAAS was introduced as an extension library to the Java Platform, Standard Edition 1.3 and was integrated in version 1.4.[1]

JAAS has as its main goal the separation of concerns of user authentication so that they may be managed independently. While the former authentication mechanism contained information about where the code originated from and who signed that code, JAAS adds a marker about who runs the code. By extending the verification vectors JAAS extends the security architecture for Java applications that require authentication and authorization modules.

Java Authentication and Authorization Service(JAAS,Java 验证和授权 API)提供了灵活和可伸缩的机制来保证客户端或服务器端的 Java 程序。Java 早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS 强调的是通过验证谁在运行代码以及他/她的权限来保护系统免受用户的攻击。它让你能够将一些标准的安全机制,例如 Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统当中去。

  • 使用。
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssI.internaI.ssI.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypt0.provider.SunJCE
security.provider.5=sun.security.Jgss.SunProvider
security.provider.6=org.bouncycastle.Jce.provider.BouncyCastIeProvider
使用 JDK 以外的扩展包需要修改资源文件并增加相关的内容, 这是使用 JDK 以外的扩展包的方式之一。
geek@ubuntu:~/geek/tools_my/jdk-11.0.7/conf/security$ ll
total 64
drwxrwxr-x 3 geek geek  4096 May 21 20:57 ./
drwxrwxr-x 4 geek geek  4096 May 21 20:57 ../
-rw-r--r-- 1 geek geek  2180 Mar 12 09:15 java.policy
-rw-r--r-- 1 geek geek 47570 Mar 12 09:15 java.security
drwxrwxr-x 4 geek geek  4096 May 21 20:57 policy/



相关 java 包、类。
  • java.security
    消息摘要。

  • javax.cryppto
    安全消息摘要,消息认证(鉴别)码。

  • java.net.ssl
    安全套接字。



第三方 Java 扩展。

Bouncy Castle。
  • 两种支持方案:配置。调用。
Commons Codec。
  • Apache。

  • Base64、二进制、十六进制、字符集编码。

  • Url 编码 / 解码。



Java 实现。

Base64 实现。
jdk。
package com.geek.security.base64;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

public class Base64Demo {

    private static String src = "imooc security base64";

    public static void main(String[] args) throws IOException {
        jdkBase64();
    }

    private static void jdkBase64() throws IOException {
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(src.getBytes());
        System.out.println("encode = " + encode);
        // aW1vb2Mgc2VjdXJpdHkgYmFzZTY0

        BASE64Decoder decoder = new BASE64Decoder();
        byte[] bytes = decoder.decodeBuffer(encode);
        String decode = new String(bytes);
        System.out.println("decode = " + decode);
        // imooc security base64
        System.out.println("bytes = " + bytes);
        // [B@1b6d3586
    }

}



Commons Codec。
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.14</version>
</dependency>
package com.geek.security.base64;

import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

public class Base64Demo {

    private static String src = "imooc security base64";

    public static void main(String[] args) throws IOException {
        jdkBase64();
//        commonsCodecBase64();
    }

    private static void commonsCodecBase64() {
        byte[] encodeBase64 = Base64.encodeBase64(src.getBytes());
        String encode = new String(encodeBase64);
        System.out.println("encode = " + encode);
        // aW1vb2Mgc2VjdXJpdHkgYmFzZTY0

        byte[] decodeBase64 = Base64.decodeBase64(encode);
        String decode = new String(decodeBase64);
        System.out.println("decode = " + decode);
        // imooc security base64
    }

    private static void jdkBase64() throws IOException {
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(src.getBytes());
        System.out.println("encode = " + encode);
        // aW1vb2Mgc2VjdXJpdHkgYmFzZTY0

        BASE64Decoder decoder = new BASE64Decoder();
        byte[] bytes = decoder.decodeBuffer(encode);
        String decode = new String(bytes);
        System.out.println("decode = " + decode);
        // imooc security base64
        System.out.println("bytes = " + bytes);
        // [B@1b6d3586
    }

}



Bouncy Castle。
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.65</version>
</dependency>

package com.geek.security.base64;

import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;

public class Base64Demo {

    private static String src = "imooc security base64";

    public static void main(String[] args) throws IOException {
//        jdkBase64();
//        commonsCodecBase64();
        bouncyCastleBase64();
    }

    private static void bouncyCastleBase64() {
        byte[] bytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
        String encode = new String(bytes);
        System.out.println("encode = " + encode);
        // aW1vb2Mgc2VjdXJpdHkgYmFzZTY0

        byte[] bytes1 = org.bouncycastle.util.encoders.Base64.decode(bytes);
        String decode = new String(bytes1);
        System.out.println("decode = " + decode);
        // imooc security base64
    }

}



应用场景。

email。

密钥。

证书文件。



产生。

邮件的“历史问题”。



定义。

基于 64 个字符的编码算法。



RFC 2045。



衍生。

Base 16

Base 32

Url Base64

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyfGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值