zoukankan      html  css  js  c++  java
  • Java实现Base64加密

    阅读本文约“2.5分钟”

    Java加解密系列,介绍Java加密解密的基础知识,并使用Base64算法实现加解密。

    对于加密在企业中是非常常见的,就如邮件的传输,每个企业都会有自己设置安全方式,设置加密方式、SSL等、修改邮件端口,其目的都是为了实现加解密,保证数据的安全传输。

    Base64算法是一种初级简单的加解密方式。其创始也是有邮件演进而来的。

    密码的常用术语

    ——明文:待加密信息

    ——密文:经过加密后的明文

    ——加密:明文转为密文的过程

    ——加密算法:明文转为密文的转换算法

    ——加密密钥:通过加密算法进行加密操作用的密钥

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

    ——解密算法:密文转为明文的算法

    ——解密密钥:通过解密算法进行解密操作用的密钥

    ——密码分析:截获密文者试图通过分析截获的密文从而推断出原来的明文或密钥的过程

    ——主动攻击:攻击者非法入侵密码系统,采用伪造、修改、删除等手段向系统注入假消息进行欺骗。(对密文具有破坏作用)

    ——被动攻击:对一个保密系统采取截获密文并对其进行分析和攻击。(对密文没有破坏作用)

    ——密码体制:由明文空间、密文空间、密钥空间、加密算法和解密算法五部分构成。

    ——密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全的服务

    ——密码系统:指用于加密、解密的系统

    ——柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全取决于密钥,对密钥保密,对算法公开。——现代密码学设计的基本原则

    密码分类

    时间:

    ——古典密码:以字符为基本加密单位

    ——现代密码:以信息块为基本加密单元

    保密内容:

    受限制算法:算法的保密性基于保持算法的秘密(军事领域)-古典密码

    基于密钥算法:算法的保密性基于对密钥的保密-现代密码

    密码体制:

    对称密码(单钥密码或私钥密码)

    非对称密码(双钥密码或公钥密码)

    明文处理:

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

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

    散列函数用来验证数据的完整性(并不是用来加解密)

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

    散列函数相关算法:消息摘要算法MD5等、SHA-安全散列算法、MAC-消息认证码算法

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

    OSI与TCP/IP安全体系

    OSI(Open System Interconnection)

    7层网络通信(物理层-》数据链路层-》网络层-》传输层-》会话层-》表示层-》应用层)

    如果把网络通信视为Y轴,那么对应的安全机制就是X轴,分别是:加密机制、数字签名机制、访问控制机制、数据完整性机制、认证机制、业务流填充机制、路由控制机制、公证机制

    而Z轴则是安全服务:认证(鉴别)、访问控制服务、数据保密性服务、数据完整性服务、抗否认性服务

    而TCP/IP安全体系则有所不同。

    其网络通信:网络接口层、网络层、传输层、应用层

    安全体系结构:网络接口层安全、网络层安全、传输层安全、应用层安全

    相关代码实例:

    <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on --><dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk15on</artifactId>
      <version>1.59</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.11</version>
    </dependency>

    public class Base64 {

       private static String src = "myself security base64";

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

       public static void jdkBase64(){
           BASE64Encoder encoder = new BASE64Encoder();
           String encode =  encoder.encode(src.getBytes());
           System.out.println("encode:"+encode);

           BASE64Decoder decoder = new BASE64Decoder();
           try {
               System.out.println(new String(decoder.decodeBuffer(encode)));
           } catch (IOException e) {
               e.printStackTrace();
           }
       }

       public static void commonBase64(){
           byte[] encodeBytes = org.apache.commons.codec.binary.Base64.encodeBase64(src.getBytes());
           System.out.println("encode:"+new String(encodeBytes));

       }

    }
  • 相关阅读:
    做嵌入式编程,为什么用的是C语言而不是C++呢?
    结对-四则运算答题器-设计文档
    Windows Forms Thread Safety: InvalidOperationException and Invoking
    DialogForm
    Views in Full Screen Mode
    Painting on a Panel
    A Gradient Title Bar for modal and modeless dialog
    MSN Messenger Type Status Bar Popup Message Box
    EZOptionsDlg
    Transparent Static Text In Dialogs
  • 原文地址:https://www.cnblogs.com/UncleCatMySelf/p/9276350.html
Copyright © 2011-2022 走看看