java加解密通訊產生亂碼問題的一個原因點?

在內蒙做專案時,出現了一個很詭異的問題,收到的報文解密後,竟然出現部分字元亂碼的問題。折磨了我兩天,總算找到了問題出現在了公用的通訊類中:通訊類中為了日誌列印先將收到的位元組陣列轉換成了字串,然後再將該字串轉換成位元組陣列。正常情況下是沒問題的,但在密文的情況下呢? 看下面的示例程式吧:

public class Test {

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

String tDESKey = "111100002222444466668888"; //3DES 金鑰

//裡面是自己定義的幾個java自帶的加解密類

SecretUtil secutil = new SecretUtil();

//請求報文明文

String reqming = "the request will send !!";

byte[] reqmi = secutil.threeDESencrypt(reqming, tDESKey); //加密後的位元組流

String tmp = new String(reqmi);

//經過一次String的位元組陣列,理論上應當和reqmi是一樣的,但是呢...看輸出結果吧!

byte[] afterString = tmp.getBytes();

System.out.println("未經String轉換的加密的報文:" + new String(secutil.encryptBASE64(reqmi)));

System.out.println("經過String轉換的加密的報文:" + new String(secutil.encryptBASE64(afterString)));

}

}

控制檯輸出:

未經String轉換的加密的報文:20iV3D+bwTxo0t1Ruxuvu+KX/WFgtqXfCyFHmy+1agg=

經過String轉換的加密的報文:20iV3D+bwTxo0t1RP6+74pf9YWC2pT8hRz+1agg=

看出來了吧,遇到類似問題的小夥伴們可以看看你們的通訊方法是否有問題吧。

相關問題答案