3DES加解密中文亂碼


情況就是:通過3DS加密后的中文字符串,

解密:在windows默認字符集的環境下是不會出現亂碼,但是在linux環境下就可能會出現中文亂碼

3DES解密方法:

public static String decryptThreeDESECB(final String src, final String key) throws Exception {
        // --通過base64解碼,將字符串轉成byte數組
        final BASE64Decoder decoder = new BASE64Decoder();
        final byte[] bytesrc = decoder.decodeBuffer(src);
        // --解密的key
        DESedeKeySpec dks = null;
        if(StringUtils.isEmpty(key)){
            dks = new DESedeKeySpec(AppSecret.getBytes("UTF-8")); 
        }else{
            dks= new DESedeKeySpec(key.getBytes("UTF-8"));  
        }
        final SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        final SecretKey securekey = keyFactory.generateSecret(dks);
        // --Chipher對象解密`
        final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
      //解密向量向量
        
        final IvParameterSpec iv = new IvParameterSpec(AppKey.getBytes("UTF-8"));
        cipher.init(Cipher.DECRYPT_MODE, securekey,iv);
        final byte[] retByte = cipher.doFinal(bytesrc);
        //return new String(retByte);
     return new String(retByte,"UTF-8");
    }

上面代碼最后返回結果處 如果 不對new String(retByte) 進行指定字符集 就有可能導致在linux環境下出現亂碼

原因你加密過程使用的字符集要和你解密時候用的字符集保持一致,如果不對結果進行指定字符集:會默認使用系統字符集,如果和你加密過程不一致極容易出現中文亂碼,

也許講的不是很對,但是完美解決了我項目中的問題 !

這是個人第一次的博客隨筆,意在積累自己工作中的點滴, 更希望能幫到各位朋友解決遇到相同的問題。

如果有什么不對的歡迎留言!

希望能幫到各位!
  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM