情況就是:通過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環境下出現亂碼
原因你加密過程使用的字符集要和你解密時候用的字符集保持一致,如果不對結果進行指定字符集:會默認使用系統字符集,如果和你加密過程不一致極容易出現中文亂碼,
也許講的不是很對,但是完美解決了我項目中的問題 !
這是個人第一次的博客隨筆,意在積累自己工作中的點滴, 更希望能幫到各位朋友解決遇到相同的問題。
如果有什么不對的歡迎留言!
希望能幫到各位!