84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
光阴似箭催人老,日月如移越少年。
因为已经不是UTF-8字符串数据了,亲。你加密了啊。DES产生的是不可读的二进制数据,你强行用new String按照UTF-8编码解释,当然是乱码了,如果能直接读出来,要加密何用?因为大多数基于数学算法加密的数据,产生的都是二进制块或者流数据。只有解密了才能读到原文。如果你希望加密后的数据能够存储为文本或者HTTP传输,你可以将数据用BASE64编码,编码后就是ASCII字符串,不会乱码了(当然人还是看不懂)。
加密后是字节数组,不是所有字节数组都可以通过new String()转换成字符串的
这可能是你没有理解内存字节数据流与字符串的区别如果你使用文本编辑器16进制显示查看过数据, 那么你就不会有此疑问了.String为什么能显示出字符串, 那是因为内存数据符合一定编码规则的内存数据, 比如UTF-8编码.但一般des加密后的数据都是一些完全的内存数据流, 他是不符合字符串编码规则的, 所以你强行用字符串编码规则去解析它时, 就会变成"乱码".
但加密的目的不正就让人看不懂吗?
是乱码就对了
加密后就应该是读不懂的东西。
这里有篇相似的文章 https://segmentfault.com/q/10...
为什么你会以为不是乱码呢?
加密后一般是byte数组,转换为16进制的字符串就可以了啊
加密后可以再 Base64,
因为已经不是UTF-8字符串数据了,亲。你加密了啊。DES产生的是不可读的二进制数据,你强行用new String按照UTF-8编码解释,当然是乱码了,如果能直接读出来,要加密何用?
因为大多数基于数学算法加密的数据,产生的都是二进制块或者流数据。只有解密了才能读到原文。
如果你希望加密后的数据能够存储为文本或者HTTP传输,你可以将数据用BASE64编码,编码后就是ASCII字符串,不会乱码了(当然人还是看不懂)。
加密后是字节数组,不是所有字节数组都可以通过new String()转换成字符串的
这可能是你没有理解内存字节数据流与字符串的区别
如果你使用文本编辑器16进制显示查看过数据, 那么你就不会有此疑问了.
String为什么能显示出字符串, 那是因为内存数据符合一定编码规则的内存数据, 比如UTF-8编码.
但一般des加密后的数据都是一些完全的内存数据流, 他是不符合字符串编码规则的, 所以你强行用字符串编码规则去解析它时, 就会变成"乱码".
但加密的目的不正就让人看不懂吗?
是乱码就对了
加密后就应该是读不懂的东西。
这里有篇相似的文章 https://segmentfault.com/q/10...
为什么你会以为不是乱码呢?
加密后一般是byte数组,转换为16进制的字符串就可以了啊
加密后可以再 Base64,