程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java算法實現base64加密

java算法實現base64加密

編輯:關於JAVA
 

一、Base64算法概述
 

Base64算法最早應用於解決電子郵件傳輸的問題。它是一種基於64個字符的編碼算法,根據RFC 2045的定義:“Base64內容傳輸編碼是一種以任意8位字節序列組合的描述形式,這種形式不易被人直接識別。”

經過Base64編碼後的數據會比原始數據略長,為原來的4/3倍。經過編碼後的字符串的字符數是以4為單位的整數倍。

Base64算法的編碼和解碼的操作可充當加密和解密的操作,還有一張字符映射表充當了密鑰。盡管如此,Base64算法仍不能叫做加密算法。
 


 

二、Base64算法實現原理

Base64算法主要是將給定的字符以與字符編碼(如ASCII碼,UTF-8碼)對應的十進制數為基准,做編碼操作:

1、將給定的字符串以字符為單位,轉換為對應的字符編碼(如ASCII碼)。

2、將獲得的字符編碼轉換為二進制碼。

3、對獲得的二進制嗎做分組轉換操作,每3個8位二進制碼為一組,轉換為每4個6位二進制為一組(不足6位時地位補0)。這是一個分組變化的過程,3個8位二進制碼和4個6位二進制碼的長度都是24位(3*8=4*6=24)。

4、對獲得的4-6二進制碼補位,向6位二進制碼添加2位高位0,組成4個8位二進制碼。

5、將獲得的4-8二進制碼轉換為十進制碼。

6、將獲得的十進制碼轉換為Base64字符表中對應的字符。


 

舉個例子:

有一個字符串:“Ad3”我們要對其進行加密處理。

字符串:                       Ad3

字    符:                         A                         d                        3

ASCII碼:                     65                      100                    51

二進制碼:                01000001      01100100        00110011

4-6二進制碼:         010000    010110   010000   110011

4-8二進制碼:        00010000     00010110    00010000     00110011

十進制碼 :                  16                   22                  16                    51

字符表映射碼:          Q                      W                   Q                      z

因此,字符串“Ad3”經過Base64編碼後就得到了“QWQz”

Base64的字符表映射碼:


 

 

Sun公司本身並沒有提供Base64算法的相關實現。所以我們要用到其他開源組件的Base64算法的實現。如Bouncy Castle和Commons Codec。
 

 

 

1、Bouncy Castle的應用

Bouncy Castle實現的只是一般的Base64算法,沒有遵循RFC標准
 

直接將下載的bcprov-jdk16-143.jar包導入工程即可。具體應用如下:

 

[java] view plaincopyprint?

package Test;  

import java.io.UnsupportedEncodingException;  

import org.bouncycastle.util.encoders.Base64;  

/**

* 封裝Base64的工具類

*

*/

class Base64Coder{  

  public final static String ENCODING="UTF-8";  

   //加密

  public static String encoded(String data) throws UnsupportedEncodingException{  

       byte[] b=Base64.encode(data.getBytes(ENCODING));  

      return new String(b,ENCODING);  

  }  

  //解密

  public static String decode(String data) throws UnsupportedEncodingException{  

      byte[] b=Base64.decode(data.getBytes(ENCODING));  

       return new String(b,ENCODING);  

  }  

}  

/**

* 測試類

*/

public class Base64Test {  

   public static void main(String[] args) throws UnsupportedEncodingException {  

      String str="Ad3";  

       //加密該字符串

       String encodedString=Base64Coder.encoded(str);  

       System.out.println(encodedString);  

      //解密該字符串

       String decodedString=Base64Coder.decode(encodedString);  

      System.out.println(decodedString);  

   }  

}  

package Test;

import java.io.UnsupportedEncodingException;

import org.bouncycastle.util.encoders.Base64;
/**
 * 封裝Base64的工具類
 *
 */
class Base64Coder{
	public final static String ENCODING="UTF-8"; 
	//加密
	public static String encoded(String data) throws UnsupportedEncodingException{
		byte[] b=Base64.encode(data.getBytes(ENCODING));
		return new String(b,ENCODING);
	}
	//解密
	public static String decode(String data) throws UnsupportedEncodingException{
		byte[] b=Base64.decode(data.getBytes(ENCODING));
		return new String(b,ENCODING);
	}
}
/**
 * 測試類
 */
public class Base64Test {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String str="Ad3";
		//加密該字符串
		String encodedString=Base64Coder.encoded(str);
		System.out.println(encodedString);
		//解密該字符串
		String decodedString=Base64Coder.decode(encodedString);
		System.out.println(decodedString);
	}
}

 


 

 

 

 

 

Commons Codec的應用

Commons Codec即實現了一般的Base64算法,也實現了遵循RFC標准的Base64算法
 

直接將下載的commons-codec-1.6-bin.zip解壓,將解壓開的文件夾裡面的commons-codec-1.6.jar包導入工程即可。
 

 

[java] view plaincopyprint?

package Test;  

import java.io.UnsupportedEncodingException;  

import org.apache.commons.codec.binary.Base64;  

/**

* 封裝Base64的工具類

*

*/

class Base64Coder {  

   public final static String ENCODING = "UTF-8";  

   // 加密

   public static String encoded(String data) throws UnsupportedEncodingException {  

       byte[] b = Base64.encodeBase64(data.getBytes(ENCODING));  

       return new String(b, ENCODING);  

   }  

  // 加密,遵循RFC標准

   public static String encodedSafe(String data) throws UnsupportedEncodingException {  

       byte[] b = Base64.encodeBase64(data.getBytes(ENCODING),true);  

       return new String(b, ENCODING);  

   }  

 // 解密

   public static String decode(String data) throws UnsupportedEncodingException {  

       byte[] b = Base64.decodeBase64(data.getBytes(ENCODING));  

      return new String(b, ENCODING);  

   }  

}  

/**

* 測試類

*/

public class Base64Test {  

   public static void main(String[] args) throws UnsupportedEncodingException {  

       String str = "Ad3";  

       // 加密該字符串

      String encodedString = Base64Coder.encodedSafe(str);  

      System.out.println(encodedString);  

       // 解密該字符串

       String decodedString = Base64Coder.decode(encodedString);  

       System.out.println(decodedString);  

  }  

}  

package Test;

import java.io.UnsupportedEncodingException;

import org.apache.commons.codec.binary.Base64;

/**
 * 封裝Base64的工具類
 * 
 */
class Base64Coder {
	public final static String ENCODING = "UTF-8";

	// 加密
	public static String encoded(String data) throws UnsupportedEncodingException {
		byte[] b = Base64.encodeBase64(data.getBytes(ENCODING));
		return new String(b, ENCODING);
	}

	// 加密,遵循RFC標准
	public static String encodedSafe(String data) throws UnsupportedEncodingException {
		byte[] b = Base64.encodeBase64(data.getBytes(ENCODING),true);
		return new String(b, ENCODING);
	}

	// 解密
	public static String decode(String data) throws UnsupportedEncodingException {
		byte[] b = Base64.decodeBase64(data.getBytes(ENCODING));
		return new String(b, ENCODING);
	}
}

/**
 * 測試類
 */
public class Base64Test {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String str = "Ad3";
		// 加密該字符串
		String encodedString = Base64Coder.encodedSafe(str);
		System.out.println(encodedString);
		// 解密該字符串
		String decodedString = Base64Coder.decode(encodedString);
		System.out.println(decodedString);
	}
}

 

 

具體的應用可以參照Bouncy Castle和Commons Codec的API。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved