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));}
}
Java实现Base64加密的更多相关文章
- Java的Base64加密原理
出自: http://www.cnblogs.com/winner-0715/p/5920269.html http://www.cnblogs.com/koliop090/p/5203553.h ...
- Java android DES+Base64加密解密
服务器与客户端加密解密传输, 中间遇到各种坑,客户端无论用AES还是DES解密时都会出现错误,后来才看到好多人说要用AES/DES加完密后还要BASE64加密,照做时发现android和java的Ba ...
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- Java中使用BASE64加密&解密
package com.bao.tools.encryption; import java.io.IOException; import org.junit.Test; import sun.misc ...
- Java Base64加密、解密原理Java代码
Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...
- Java Base64 加密解密
使用JDK的类 BASE64Decoder BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...
- Java实现 Base64、MD5、MAC、HMAC加密
开始对那些基本的加密还不怎么熟练,然后总结了些,写了一个测试:支持 Base64.MD5.MAC.HMAC加密,长话短说,我们都比较喜欢自己理解,看代码吧! 采用的输UTF-8的格式... packa ...
- URL中增加BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)
序 昨天在做一个 Demo 的时候,因为是调用第三方的接口,採用的是 HTTP 的通信协议,依照文档上的说明,须要把參数进行加密后增加到 URL 中.可是,就是这个看似普普通通的操作,却让我着实费了非 ...
- password学3——Java BASE64加密解密
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之中的一个,大家能够查看RFC2045-RFC2049.上面有MIME的具体规范.Base64编码可用于在HTTP环境下传递较长的标识信息 ...
随机推荐
- 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现(更新优化思路)
注:本文仅用于在博客园学习分享,还在随着项目不断更新和完善中,多有不足,暂谢绝各平台或个人的转载和推广,感谢支持. 一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是 ...
- 用Ajax遍历三级下拉框
用Ajax遍历三级下拉框 //通过一级分类的id查二级分类(记得在前端网页按钮绑定点击事件) function getSecondCategory(oneCategoryId){ alert(&quo ...
- 【array】数组复习
一.定义 数组:一组相关变量的集合. 二.初始化 三种方法初始化: int [] intArray = new int[4]; //必须表明容量才表示已经初始化,不带的话会报错未初始化 String ...
- js中select标签中的option选择
f1 = function () { //var selected_val = document.getElementById(test).value; var obj = document.getE ...
- 如何批量添加图片到ppt的方法
如何批量添加图片到ppt 许多时候会做一些幻灯片,需要大量的图片,但是往往一张以张的加图片,会很浪费时间,如何快速添加图片,一次解决呢? 步骤:插入-相册-点击相册 点击文件,批量选择你要插入的图片, ...
- SQL三表左关联查询
今天在开发的时候遇到了一个需求就是三遍关联查询,表A包含有表B和表C的uid,然后使用left join左关联查询: SELECT c.`uid`, `fromuseruid`, `touseruid ...
- JavaScript中的原型链原理
工作中经常解除到prototype的概念,一开始错误的认为prototype是对象的原型链,其实prototype只能算是JavaScript开放出来的原型链接口,真正的原型链概念应该是__proto ...
- Android UI(三)SlidingMenu实现滑动菜单(详细 官方)
Jeff Lee blog: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),retain the url when reproduced ! Thanks ...
- centos 7 linux系统默认ftp安装配置和部署(详细讲解)
小生接触 Linux 系统时间不长,想解决linux系统ftp安装及部署问题,折腾了大半天,终于弄出来了,将各路高手的配置方法综合了一下,如有不对之处,欢迎各位看客指正,感谢! 一.声明: 本文采用操 ...
- (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)
在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...