JAVA加解密3-base64算法的加解密處理

base64分兩個:一個是base64針對郵件傳輸?shù)乃惴āA硗庖粋€就是為了在瀏覽器中傳送加密數(shù)據(jù)或者隱藏表單中用的加密數(shù)據(jù),防止大家直接用肉眼從頁面中看到數(shù)據(jù)內(nèi)容而采用的URL base64。其實只要是我們想讓加密數(shù)據(jù)可逆,或者想將數(shù)據(jù)不讓別人用肉眼就分辨出來,就可以用base64的算法。一些機(jī)構(gòu)給客戶的簽名值都使用base64加密后提供.
關(guān)于urlbase64算法,目前沒定義,不過我們可以參考rfc 4648的規(guī)范要求

詳細(xì)介紹參見:http://baike.baidu.com/view/469071.htm

base64算法是一個違反加密原則的加密算法。
加密原則:公布算法,但是不公布密鑰
但是base64是即公布算法又公布了轉(zhuǎn)換的密鑰。不過我們可以通過改進(jìn)base64算法來提升base64的實用性。

關(guān)于實現(xiàn):
jdk6有sun公司內(nèi)部使用base64算法的實現(xiàn),這里不推薦使用,因為用他們內(nèi)部的實現(xiàn),編譯提示錯誤。說不定哪天丟失
這里推薦使用Bouncy Castle的實現(xiàn)或者apache的commons codec的實現(xiàn)。
(1)、Bouncy Castle的實現(xiàn)跟rfc的標(biāo)準(zhǔn)略有出入
(2)、commons codec的實現(xiàn)緊密追隨rfc2045的文檔

舉例嘗試Bouncy Castle的加解密算法:
1、base64的算法實現(xiàn)

package com.ca.test;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;
/**
 * 
 * 使用bouncycastle擴(kuò)展包進(jìn)行base64為編碼
 * @kongqz
 * **/
public class Base64Coder {
    
    
    public final static String ENCODING="UTF-8";
    /***
     * 進(jìn)行base64編碼
     * @param data 要編碼的數(shù)據(jù)
     * @return 編碼后的數(shù)據(jù)
     * */
    public static String encode(String data) throws Exception{
        
        Security.addProvider(new BouncyCastleProvider());
        
        byte[] b =Base64.encode(data.getBytes(ENCODING));
        return new String(b,ENCODING);
    }
    
    /**
     * 進(jìn)行Base64解碼
     * @param data 待解碼數(shù)據(jù)
     * @return 解碼后的數(shù)據(jù)
     * */
    public static String decode(String data) throws Exception{
        
        Security.addProvider(new BouncyCastleProvider());
        
        byte[] b=Base64.decode(data.getBytes(ENCODING));
        return new String(b,ENCODING);
    }
    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        
        String tmp="java的base64位加解密操作";
        System.out.println("原文:"+tmp);
        
        String code=Base64Coder.encode(tmp);
        System.out.println("編碼后:"+code);
        
        System.out.println("解碼后:"+Base64Coder.decode(code));
    }
}
控制臺輸出的結(jié)果為:

原文:java的base64位加解密操作
編碼后:amF2YeeahGJhc2U2NOS9jeWKoOino+WvhuaTjeS9nA==
解碼后:java的base64位加解密操作

2、urlbase64的算法實現(xiàn)

package com.ca.test;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.UrlBase64;
/**
 * 
 * 使用bouncycastle擴(kuò)展包進(jìn)行base64為編碼.此處是針對URLbase64算法的演示
 * @kongqz
 * */
public class UrlBase64Coder {
    
    public final static String ENCODING="UTF-8";
    /***
     * 進(jìn)行urlBase64編碼
     * @param data 要編碼的數(shù)據(jù)
     * @return 編碼后的數(shù)據(jù)
     * */
    public static String encode(String data) throws Exception{
        
        Security.addProvider(new BouncyCastleProvider());
        
        byte[] b =UrlBase64.encode(data.getBytes(ENCODING));
        return new String(b,ENCODING);
    }
    
    /**
     * 進(jìn)行urlBase64解碼
     * @param data 待解碼數(shù)據(jù)
     * @return 解碼后的數(shù)據(jù)
     * */
    public static String decode(String data) throws Exception{
        
        Security.addProvider(new BouncyCastleProvider());
        
        byte[] b=UrlBase64.decode(data.getBytes(ENCODING));
        return new String(b,ENCODING);
    }
    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        
        String tmp="java的urlbase64位加解密操作";
        System.out.println("原文:"+tmp);
        
        String code=UrlBase64Coder.encode(tmp);
        System.out.println("編碼后:"+code);
        
        System.out.println("解碼后:"+UrlBase64Coder.decode(code));
    }
}
控制臺輸出結(jié)果如下:
原文:java的urlbase64位加解密操作
編碼后:amF2YeeahHVybGJhc2U2NOS9jeWKoOino-WvhuaTjeS9nA..
解碼后:java的urlbase64位加解密操作

對比后我們可以發(fā)現(xiàn)一個問題,就是urlbase64算法就是將瀏覽器中不允許出現(xiàn)的+=號給替換成-.這些符號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于計算機(jī)軟件的非法復(fù)制,通信的泄密、數(shù)據(jù)安全受到威脅,解密及盜版問題日益嚴(yán)重,甚至引發(fā)國際爭端,所以在信息安全技...
    慕涵盛華閱讀 2,695評論 0 4
  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 3,039評論 0 6
  • 隨著對于安全度的不斷要求,對于數(shù)據(jù)加解密與破解之間的斗爭,加解密的方式也在不斷發(fā)生著變化,來看看現(xiàn)在流行的一些加解...
    zhouhao_180閱讀 2,228評論 1 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 開源方法: 1. 本職工作為銷售崗位,努力增加銷售額那么工資自然會上升,并且2017年,公司針對有效建議/創(chuàng)新/工...
    EmmaWu閱讀 197評論 0 0

友情鏈接更多精彩內(nèi)容