第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么des加密后輸出亂碼?

為什么des加密后輸出亂碼?

溫溫醬 2019-03-20 18:15:07
     public static void main(String args[]) {              String string = "abcdef你";           KeyGenerator keyGenerator = null;            try {                keyGenerator = KeyGenerator.getInstance("DES");                    SecretKey secretKey = keyGenerator.generateKey();                byte[] bytesKey = secretKey.getEncoded();                DESKeySpec desKeySpec = new DESKeySpec(bytesKey);                SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");                SecretKey secretKey1 = factory.generateSecret(desKeySpec);                    Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");                cipher.init(Cipher.ENCRYPT_MODE, secretKey1);                byte[] sbytes = string.getBytes("utf-8");                byte[] bytes = cipher.doFinal(string.getBytes());                System.out.println("加密前 bytes[]:" + byte2hex(sbytes));                System.out.println("加密前string:" + new String(sbytes, "UTF-8"));                System.out.println("加密后 bytes[]:" + byte2hex(bytes));                System.out.println("加密后string:" + new String(bytes, "UTF-8"));            } catch (InvalidKeyException e) {                e.printStackTrace();            } catch (InvalidKeySpecException e) {                e.printStackTrace();            } catch (BadPaddingException e) {                e.printStackTrace();            } catch (NoSuchAlgorithmException e) {                e.printStackTrace();            } catch (IllegalBlockSizeException e) {                e.printStackTrace();            } catch (NoSuchPaddingException e) {                e.printStackTrace();            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }            }            private static String byte2hex(byte[] buffer) {            String h = "";            輸出結果加密前 bytes[]: 61 62 63 64 65 66 e4 bd a0加密前string:abcdef你加密后 bytes[]: e1 32 7c 94 ce 5d 08 f6 8f b0 af 32 5c d3 dc a5加密后string:?2|??]????2\??
查看完整描述

8 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

因為已經不是UTF-8字符串數據了,親。你加密了啊。DES產生的是不可讀的二進制數據,你強行用new String按照UTF-8編碼解釋,當然是亂碼了,如果能直接讀出來,要加密何用?
因為大多數基于數學算法加密的數據,產生的都是二進制塊或者流數據。只有解密了才能讀到原文。
如果你希望加密后的數據能夠存儲為文本或者HTTP傳輸,你可以將數據用BASE64編碼,編碼后就是ASCII字符串,不會亂碼了(當然人還是看不懂)。

查看完整回答
反對 回復 2019-04-25
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

加密后是字節(jié)數組,不是所有字節(jié)數組都可以通過new String()轉換成字符串的


查看完整回答
反對 回復 2019-04-25
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

這可能是你沒有理解內存字節(jié)數據流與字符串的區(qū)別
如果你使用文本編輯器16進制顯示查看過數據, 那么你就不會有此疑問了.
String為什么能顯示出字符串, 那是因為內存數據符合一定編碼規(guī)則的內存數據, 比如UTF-8編碼.
但一般des加密后的數據都是一些完全的內存數據流, 他是不符合字符串編碼規(guī)則的, 所以你強行用字符串編碼規(guī)則去解析它時, 就會變成"亂碼".

但加密的目的不正就讓人看不懂嗎?

是亂碼就對了


查看完整回答
反對 回復 2019-04-25
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

加密后就應該是讀不懂的東西。


查看完整回答
反對 回復 2019-04-25
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

為什么你會以為不是亂碼呢?


查看完整回答
反對 回復 2019-04-25
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

加密后一般是byte數組,轉換為16進制的字符串就可以了啊


查看完整回答
反對 回復 2019-04-25
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

加密后可以再 Base64,


查看完整回答
反對 回復 2019-04-25
  • 8 回答
  • 0 關注
  • 2056 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號