java实现Base64加密解密算法
作者:wangxp 时间:2023-11-25 08:07:27
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。
此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
java的加密方式有很多中,现在给大家分享一个Base64加密的方式
package com.crypt;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* BASE64加密解密
* @author YUANWEi
*/
public class BASE64 {
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
*/
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
}
为什么要使用Base64加密呢?
Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。
而且base64特别适合在http,mime协议下快速传输数据。
base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。
Base64编码方法要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效数据,空余的那两个 bit用0补上成为一个字节。因此Base64所造成数据冗余不是很严重,Base64是当今比较流行的编码方法,因为它编起来速度快而且简单。
知识补充:
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SpringBoot实现PPT格式文件上传并在线预览功能
![](https://img.aspxhome.com/file/2023/3/57403_0s.png)
SpringBoot注入自定义的配置文件的方法详解
![](https://img.aspxhome.com/file/2023/2/66682_0s.png)
redis与ssm整合方法(mybatis二级缓存)
![](https://img.aspxhome.com/file/2023/3/62463_0s.png)
Eclipse新建Android项目报错解决方案详细汇总
![](https://img.aspxhome.com/file/2023/6/106836_0s.png)
Springboot 如何指定获取出 yml文件里面的配置值
![](https://img.aspxhome.com/file/2023/6/62706_0s.png)
java身份证合法性校验工具类实例代码
C#实现控制电脑注销,关机和重启
![](https://img.aspxhome.com/file/2023/9/76429_0s.png)
Java技能点之SimpleDateFormat进行日期格式化问题
![](https://img.aspxhome.com/file/2023/9/58339_0s.jpg)
Android SwipeRefreshLayout超详细讲解
![](https://img.aspxhome.com/file/2023/7/94257_0s.gif)
Android实现文字滚动播放效果的代码
android Tween Animation属性设置方法实例
![](https://img.aspxhome.com/file/2023/5/137915_0s.jpg)
c#中判断字符串是不是数字或字母的方法
gradle使用maven-publish发布jar包上传到私有maven配置
关于C# 类的封装详情
Java简单实现约瑟夫环算法示例
![](https://img.aspxhome.com/file/2023/2/81342_0s.png)
Java实现HDFS文件上传下载
Android编程使用GestureDetector实现简单手势监听与处理的方法
windows系统配置Java开发环境变量
![](https://img.aspxhome.com/file/2023/2/62152_0s.jpg)
C#中使用JSON.NET实现JSON、XML相互转换
Flutter底部导航栏的实现方式
![](https://img.aspxhome.com/file/2023/3/126803_0s.gif)