阅读本文约“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));

}

}

Java实现Base64加密的更多相关文章

  1. Java的Base64加密原理

    出自:   http://www.cnblogs.com/winner-0715/p/5920269.html http://www.cnblogs.com/koliop090/p/5203553.h ...

  2. Java android DES+Base64加密解密

    服务器与客户端加密解密传输, 中间遇到各种坑,客户端无论用AES还是DES解密时都会出现错误,后来才看到好多人说要用AES/DES加完密后还要BASE64加密,照做时发现android和java的Ba ...

  3. (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

    我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...

  4. Java中使用BASE64加密&解密

    package com.bao.tools.encryption; import java.io.IOException; import org.junit.Test; import sun.misc ...

  5. Java Base64加密、解密原理Java代码

    Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...

  6. Java Base64 加密解密

    使用JDK的类 BASE64Decoder  BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...

  7. Java实现 Base64、MD5、MAC、HMAC加密

    开始对那些基本的加密还不怎么熟练,然后总结了些,写了一个测试:支持 Base64.MD5.MAC.HMAC加密,长话短说,我们都比较喜欢自己理解,看代码吧! 采用的输UTF-8的格式... packa ...

  8. URL中增加BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)

    序 昨天在做一个 Demo 的时候,因为是调用第三方的接口,採用的是 HTTP 的通信协议,依照文档上的说明,须要把參数进行加密后增加到 URL 中.可是,就是这个看似普普通通的操作,却让我着实费了非 ...

  9. password学3——Java BASE64加密解密

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之中的一个,大家能够查看RFC2045-RFC2049.上面有MIME的具体规范.Base64编码可用于在HTTP环境下传递较长的标识信息 ...

随机推荐

  1. HDFS-HA高可用

    HDFS-HA工作机制 通过双NameNode消除单点故障 HDFS-HA工作要点 1.元数据管理方式需要改变 内存中各自保存一份元数据: Edits日志只有Active状态的NameNode节点可以 ...

  2. The test form is only available for requests from the local machine

    使用浏览器测试Web服务时出现提示“The test form is only available for requests from the local machine.”的解决办法 在Web服务项 ...

  3. 《JavaScript 高级程序设计》读书笔记一 简介

    一   历史 二   实现 a. javascript三个部分: ECMAScript:由ECMA-262定义,提供核心语言功能: DOM:提供HTML的应用程序编程接口/提供访问和操作网页内容的方法 ...

  4. Vipe-技术选型

    1.AOP,IOC框架-Spring 选择Spring是最不需要考虑的.应该90%以上的JAVA项目都有用Spring. 2.ORM框架-Mybatis Mybatis入门比较简单,并且对SQL语法的 ...

  5. 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)

    @import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=Syn ...

  6. zookeeper集群配置详细教程

      第一步:环境准备 环境 版本 说明 JDK 1.8 zookeeper运行所需 centos 7 操作系统 需要配置好JDK的环境变量 zookeeper-3.4.9.tar.gz 3.4.9 z ...

  7. Mybatis框架七:三种方式整合Spring

    需要的jar包: 新建lib文件夹放入jar包,Build Path-->Add To Build Path之后: 原始Dao开发示例: src下:新建核心配置文件sqlMapConfig.xm ...

  8. kafka扫盲笔记,实战入门

    Kafka作为大数据时代的产物,自有其生存之道.让我们跟随扫盲班的培训,进行大致了解与使用kafka吧.(平时工作有使用不代表就知道kafka了哟) 1. kafka介绍 1.1. 拥有的能力(能干什 ...

  9. 从TXT文本文档向Sql Server中批量导入数据

    下面我们通过以下的简单的SQL语句即可实现数据的批量导入,代码如下: Bulk insert id From 'G:\文档\test.txt' With ( fieldterminator=',', ...

  10. 【学习笔记】分类算法-k近邻算法

    k-近邻算法采用测量不同特征值之间的距离来进行分类. 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 使用数据范围:数值型和标称型 用例子来理解k-近邻算法 电影可以按 ...