在開發的時候遇到個現象。對方用php base64_encode()對字符串進行加密。但我這邊是用java解碼。導致出現問題。問題如下:
package com.tudou.test;
import java.io.IOException;
/**
*
java base64編碼和解碼的演示類
* 註:base64編碼後通過url傳遞時,獲得時"="會給替換掉,
* 處理方式:在編碼前將"=","/","+" 替換成別的字符,在解碼之前替換回來
*
* @author tw 2010-03-01
*
*/
public class TestBase64Net {
/**
* 編碼
* @param filecontent
* @return String
*/
public static String encode(byte[] bstr){
return new sun.misc.BASE64Encoder().encode(bstr);
}
/**
* 解碼
* @param filecontent
* @return string
*/
public static byte[] decode(String str){
byte[] bt = null;
try {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
bt = decoder.decodeBuffer( str );
} catch (IOException e) {
e.printStackTrace();
}
return bt;
}
/**
* @param args
*/
public static void main(String[] args) {
TestBase64Net te = new TestBase64Net();
//PHP 用base64 將union_id=102155_100001_01_01 加密後的字符串為: dW5pb25faWQ9MTAyMTU1XzEwMDAwMV8wMV8wMQ
//java 用sun.misc.BASE64Encoder().encode()進行解碼,結果為:union_id=102155_100001_01_01亂碼0
System.out.println(new String(te.decode("dW5pb25faWQ9MTAyMTU1XzEwMDAwMV8wMV8wMQ")));
//java 用sun.misc.BASE64Decoder 將union_id=102155_100001_01_01進行加密,結果為:dW5pb25faWQ9MTAyMTU1XzEwMDAwMV8wMV8wMQ==
System.out.println(new String(te.encode("union_id=102155_100001_01_01".getBytes())));
}
}
經過對比不難發現用php的base64_encode()方法進行加密,JAVA 不能用sun.misc.BASE64Encoder().encode() 進行解密。那該怎麼辦?!
可以用apache的commons包 commons-codec-1.7.jar
中的org.apache.commons.codec.binary.Base64 進行解密。
import org.apache.commons.codec.binary.Base64;
public class TestBase64 {
public static void main(String[] args) {
System.out.println(new String(Base64.decodeBase64("dW5pb25faWQ9MTAyMTU1XzEwMDAwMV8wMV8wMQ".getBytes())));
}
}