欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现Base64加密解密算法

程序员文章站 2024-03-11 15:03:55
base64是网络上最常见的用于传输8bit字节代码的编码方式之一,大家可以查看rfc2045~rfc2049,上面有mime的详细规范。base64编码可用于在http环...

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。

以上就是关于base64、base64加密解密算法的全部内容,希望对大家进行加密解密的学习有所帮助。