欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)Base64加密解密算法

 更新時(shí)間:2016年04月19日 17:05:21   作者:wangxp  
Base64用來(lái)將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法,這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Base64加密解密算法,感興趣的小伙伴們可以參考一下

Base64是網(wǎng)絡(luò)上最常見(jiàn)的用于傳輸8Bit字節(jié)代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細(xì)規(guī)范。Base64編碼可用于在HTTP環(huán)境下傳遞較長(zhǎng)的標(biāo)識(shí)信息。例如,在Java Persistence系統(tǒng)Hibernate中,就采用了Base64來(lái)將一個(gè)較長(zhǎng)的唯一標(biāo)識(shí)符(一般為128-bit的UUID)編碼為一個(gè)字符串,用作HTTP表單和HTTP GET URL中的參數(shù)。在其他應(yīng)用程序中,也常常需要把二進(jìn)制數(shù)據(jù)編碼為適合放在URL(包括隱藏表單域)中的形式。

此時(shí),采用Base64編碼不僅比較簡(jiǎn)短,同時(shí)也具有不可讀性,即所編碼的數(shù)據(jù)不會(huì)被人用肉眼所直接看到。
java的加密方式有很多中,現(xiàn)在給大家分享一個(gè)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編碼的作用:由于某些系統(tǒng)中只能使用ASCII字符。Base64就是用來(lái)將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法。它使用下面表中所使用的字符與編碼。

而且base64特別適合在http,mime協(xié)議下快速傳輸數(shù)據(jù)。

base64其實(shí)不是安全領(lǐng)域下的加密解密算法。雖然有時(shí)候經(jīng)??吹剿^的base64加密解密。其實(shí)base64只能算是一個(gè)編碼算法,對(duì)數(shù)據(jù)內(nèi)容進(jìn)行編碼來(lái)適合傳輸。雖然base64編碼過(guò)后原文也變成不能看到的字符格式,但是這種方式很初級(jí),很簡(jiǎn)單。

Base64編碼方法要求把每三個(gè)8Bit的字節(jié)轉(zhuǎn)換為四個(gè)6Bit的字節(jié),其中,轉(zhuǎn)換之后的這四個(gè)字節(jié)中每6個(gè)有效bit為是有效數(shù)據(jù),空余的那兩個(gè) bit用0補(bǔ)上成為一個(gè)字節(jié)。因此Base64所造成數(shù)據(jù)冗余不是很?chē)?yán)重,Base64是當(dāng)今比較流行的編碼方法,因?yàn)樗幤饋?lái)速度快而且簡(jiǎn)單。

知識(shí)補(bǔ)充:

標(biāo)準(zhǔn)的Base64并不適合直接放在URL里傳輸,因?yàn)閁RL編碼器會(huì)把標(biāo)準(zhǔn)Base64中的“/”和“+”字符變?yōu)樾稳纭?XX”的形式,而這些“%”號(hào)在存入數(shù)據(jù)庫(kù)時(shí)還需要再進(jìn)行轉(zhuǎn)換,因?yàn)锳NSI SQL中已將“%”號(hào)用作通配符。

為解決此問(wèn)題,可采用一種用于URL的改進(jìn)Base64編碼,它不在末尾填充'='號(hào),并將標(biāo)準(zhǔn)Base64中的“+”和“/”分別改成了“*”和“-”,這樣就免去了在URL編解碼和數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)所要作的轉(zhuǎn)換,避免了編碼信息長(zhǎng)度在此過(guò)程中的增加,并統(tǒng)一了數(shù)據(jù)庫(kù)、表單等處對(duì)象標(biāo)識(shí)符的格式。

另有一種用于正則表達(dá)式的改進(jìn)Base64變種,它將“+”和“/”改成了“!”和“-”,因?yàn)椤?”,“*”以及前面在IRCu中用到的“[”和“]”在正則表達(dá)式中都可能具有特殊含義。

此外還有一些變種,它們將“+/”改為“_-”或“._”(用作編程語(yǔ)言中的標(biāo)識(shí)符名稱(chēng))或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

Base64要求把每三個(gè)8Bit的字節(jié)轉(zhuǎn)換為四個(gè)6Bit的字節(jié)(3*8 = 4*6 = 24),然后把6Bit再添兩位高位0,組成四個(gè)8Bit的字節(jié),也就是說(shuō),轉(zhuǎn)換后的字符串理論上將要比原來(lái)的長(zhǎng)1/3。

以上就是關(guān)于Base64、Base64加密解密算法的全部?jī)?nèi)容,希望對(duì)大家進(jìn)行加密解密的學(xué)習(xí)有所幫助。

相關(guān)文章

  • Java中ArrayList類(lèi)詳細(xì)介紹

    Java中ArrayList類(lèi)詳細(xì)介紹

    這篇文章主要介紹了Java中ArrayList類(lèi)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java主線程捕獲子線程異常的實(shí)現(xiàn)

    Java主線程捕獲子線程異常的實(shí)現(xiàn)

    本文主要介紹了Java主線程捕獲子線程異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Mybatis 入門(mén)之MyBatis環(huán)境搭建(第一篇)

    Mybatis 入門(mén)之MyBatis環(huán)境搭建(第一篇)

    Mybatis的前身叫iBatis,本是apache的一個(gè)開(kāi)源項(xiàng)目, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis。這篇文章主要介紹了Mybatis入門(mén)第一篇之MyBaits環(huán)境搭建,需要的朋友參考下
    2016-12-12
  • SpringBoot配置logback的步驟

    SpringBoot配置logback的步驟

    這篇文章主要介紹了SpringBoot配置logback的步驟,幫助大家更好的理解和使用SpringBoot框架,感興趣的朋友可以了解下
    2020-09-09
  • 使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作

    使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作

    這篇文章主要介紹了使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • spring中前端明明傳了值后端卻接收不到問(wèn)題解決辦法

    spring中前端明明傳了值后端卻接收不到問(wèn)題解決辦法

    在學(xué)習(xí)Spring的時(shí)候遇到了一個(gè)問(wèn)題,后臺(tái)一直接收不到前臺(tái)傳遞過(guò)來(lái)的參數(shù),耽誤了好長(zhǎng)時(shí)間終于找到了原因,這篇文章主要給大家介紹了關(guān)于spring中前端明明傳了值后端卻接收不到問(wèn)題的解決辦法,需要的朋友可以參考下
    2024-05-05
  • 幾句話說(shuō)清session,cookie和token的區(qū)別及說(shuō)明

    幾句話說(shuō)清session,cookie和token的區(qū)別及說(shuō)明

    這篇文章主要介紹了幾句話說(shuō)清session,cookie和token的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 解決IDEA無(wú)法下載maven依賴(lài)的問(wèn)題

    解決IDEA無(wú)法下載maven依賴(lài)的問(wèn)題

    這篇文章主要介紹了解決IDEA無(wú)法下載maven依賴(lài)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中的static--靜態(tài)變量你了解嗎

    Java中的static--靜態(tài)變量你了解嗎

    Java 中被 static 修飾的成員稱(chēng)為靜態(tài)成員或類(lèi)成員。它屬于整個(gè)類(lèi)所有,而不是某個(gè)對(duì)象所有,即被類(lèi)的所有對(duì)象所共享。靜態(tài)成員可以使用類(lèi)名直接訪問(wèn),也可以使用對(duì)象名進(jìn)行訪問(wèn),.下面我們來(lái)詳細(xì)了解一下吧
    2021-09-09
  • 從面試中的問(wèn)題分析ThreadLocal

    從面試中的問(wèn)題分析ThreadLocal

    這篇文章主要介紹了從面試中的問(wèn)題分析ThreadLocal,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來(lái)一起學(xué)習(xí)一下吧
    2019-06-06

最新評(píng)論