UrlBase64加密解密
Base64字元對映表:
上面的是Base64的字元對映表。
URL Base64的某些方面有別於Base64,它不需要定義每行字元數及行末回車換行符。同時,根據URL相關要求,符號“+”和符號“/”是不允許出現在URL中的,於是採用“-”和“_”符號取代。也就是說在上圖的Base64字元對映表中 Value 63 對應的Encoding變成了“-”,Value 63 對應的Encoding變成了“_”。
同樣,在URL中,符號“=”用作引數分隔符,所以也是不合法的。“=”在Base64中用作填充符,如果需要定長的Base64編碼串,也姐需要相應的代替符號。Bouncy Castle和Commons Codec都實現了UrlBase64演算法,不同的是Bouncy Castle使用“.”作為填充符,而Commons Codec直接放棄了填充符,使用不定長UrlBase64編碼。
1、Bouncy Castle的實現和應用
import java.io.UnsupportedEncodingException;
import org.bouncycastle.util.encoders.UrlBase64;
/**
* 封裝Base64的工具類
*
*/
class UrlBase64Coder2{
public final static String ENCODING="UTF-8";
//加密
public static String encoded(String data) throws UnsupportedEncodingException{
byte[] b=UrlBase64.encode(data.getBytes(ENCODING));
return new String(b,ENCODING);
}
//解密
public static String decode(String data) throws UnsupportedEncodingException{
byte[] b=UrlBase64.decode(data.getBytes(ENCODING));
return new String(b,ENCODING);
}
}
/**
* 測試類
*/
public class test05 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str="some string";
//加密該字串
String encodedString=UrlBase64Coder2.encoded(str);
System.out.println(encodedString);
//解密該字串
String decodedString=UrlBase64Coder2.decode(encodedString);
System.out.println(decodedString);
}
}
輸出:
c29tZSBzdHJpbmc.
some string
2、Commons Codec的實現和應用
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
/**
* 封裝Base64的工具類
*
*/
class UrlBase64Coder {
public final static String ENCODING = "UTF-8";
// 加密
public static String encoded(String data) throws UnsupportedEncodingException {
byte[] b = Base64.encodeBase64URLSafe(data.getBytes(ENCODING));
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 test06 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "some string";
// 加密該字串
String encodedString = UrlBase64Coder.encoded(str);
System.out.println(encodedString);
// 解密該字串
String decodedString = UrlBase64Coder.decode(encodedString);
System.out.println(decodedString);
}
}
輸出結果:
c29tZSBzdHJpbmc
some string
3、相比較Base64輸出
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
/**
* 封裝Base64的工具類
*
*/
class UrlBase64Coder3{
public final static String ENCODING="UTF-8";
//加密
public static String encoded(String data) throws UnsupportedEncodingException {
// byte[] b=Base64.encodeBase64(binaryData)(data);
byte[] b=Base64.encodeBase64(data.getBytes(ENCODING));
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 test07 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str="some string";
//加密該字串
String encodedString=UrlBase64Coder3.encoded(str);
System.out.println(encodedString);
//解密該字串
String decodedString=UrlBase64Coder3.decode(encodedString);
System.out.println(decodedString);
}
}
輸出結果:
c29tZSBzdHJpbmc=
some string
所以,在URL地址中進行加密不能使用Base64編碼,要使用UrlBase64編碼
參考文章:
http://blog.csdn.net/lonelyroamer/article/details/7638435
相關文章
- 加密解密加密解密
- PHP加密解密PHP加密解密
- js加密解密JS加密解密
- Unity 加密解密Unity加密解密
- Java加密解密Java加密解密
- Oracle ----加密解密Oracle加密解密
- AES 加密&解密加密解密
- AES加密解密加密解密
- php mcrypt 加密 解密PHP加密解密
- RSA加密與解密加密解密
- AES CBC 加密解密加密解密
- Javascript 加密解密方法JavaScript加密解密
- iOS中加密、解密iOS加密解密
- MySQL加密和解密MySql加密解密
- 線上加密/解密工具加密解密
- Java加密解密瞭解Java加密解密
- 影像的加密與解密加密解密
- md5加密解密加密解密
- SQL Server 加密解密策略SQLServer加密解密
- Asp.Net 加密解密ASP.NET加密解密
- php rsa長文加密解密PHP加密解密
- utf8 加密與解密加密解密
- PHP Base64 加密 & 解密PHP加密解密
- golang AES-CBC 加密解密Golang加密解密
- android加密解密完美教程Android加密解密
- RSA 非對稱加密&解密加密解密
- golang securecookie加密解密cookie值GolangCookie加密解密
- C#DES加密和解密C#加密解密
- iOS加密解密演算法iOS加密解密演算法
- Java中的加密與解密Java加密解密
- php和.net 的加密解密PHP加密解密
- JAVA中AES加密和解密Java加密解密
- Asp.net 加密解密類ASP.NET加密解密
- 文字加密:常見的密碼加密解密方法加密密碼解密
- 加密解密技術—對稱演算法加密加密解密演算法
- 序列密碼的加密與解密密碼加密解密
- 前端加密解密之Crypto.js前端加密解密JS
- php如何openssl_encrypt加密解密PHP加密解密