java加解密操作过程中的中⽂乱码问题pto.Cipher;
pto.KeyGenerator;
pto.SecretKey;
pto.SecretKeyFactory;
pto.spec.DESKeySpec;
import dec.BinaryDecoder;
import dec.binary.Hex;
public class DESDemo {
public static final String src = "des test";
public static void main(String[] args)
{
jdkDES();
bcDES();
}
private static void bcDES() {
}
private static void jdkDES() {
try{
//⽣成KEY
KeyGenerator keyGenerator = Instance("DES");
keyGenerator.init(56);
System.out.Algorithm());
System.out.Provider());
SecretKey secretKey = ateKey();
byte[] bytesKey = Encoded();
System.out.Algorithm());
System.out.Format());
//通过KEY转换⽣成密钥
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
SecretKeyFactory factory = Instance("DES");
SecretKey convertedKey = ateSecret(desKeySpec);
//加密
Cipher cipher = Instance("DES/ECB/PKCS5Padding");// 算法/⼯作⽅式/填充⽅式
cipher.init(Cipher.ENCRYPT_MODE, convertedKey);
byte[] result = cipher.doFinal("要加密的内容".getBytes());
System.out.println("jdk des encrypt:" + deHexString(result));
//解密
cipher.init(Cipher.DECRYPT_MODE,convertedKey);
result = cipher.doFinal(result);
//            System.out.println("jdk des decrypt:" + new String(result));  //jdk des decrypt: 直接输出会乱码
System.out.println("jdk des decrypt:" + new String( result,"utf-8" ));  //jdk des decrypt:  依旧乱码
}
catch(Exception e) {
e.printStackTrace();
}
}
}
请问windows系统默认编码是gbk吗?
4 个回答
pto.Cipher;
pto.KeyGenerator;
pto.SecretKey;
pto.SecretKeyFactory;
pto.spec.DESKeySpec;
public class DESDemo {
public static void main(String[] args)
{
try{
//⽣成KEY
KeyGenerator keyGenerator = Instance("DES");
keyGenerator.init(56);
System.out.Algorithm());
System.out.Provider());
SecretKey secretKey = ateKey();
byte[] bytesKey = Encoded();
System.out.Algorithm());
System.out.Format());
//通过KEY转换⽣成密钥
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
SecretKeyFactory factory = Instance("DES");
SecretKey convertedKey = ateSecret(desKeySpec);
//加密
Cipher cipher = Instance("DES/ECB/PKCS5Padding");// 算法/⼯作⽅式/填充⽅式            cipher.init(Cipher.ENCRYPT_MODE, convertedKey);
byte[] result = cipher.doFinal("要加密的内容".getBytes());
//解密
cipher.init(Cipher.DECRYPT_MODE,convertedKey);
java源代码加密result = cipher.doFinal(result);
System.out.println("jdk des decrypt:" + new String(result));
}
catch(Exception e) {
e.printStackTrace();
}
}
}
⽂件保存的编码为: gb2312 的时候运⾏结果:
⽂件保存的编码为: utf-8 的时候运⾏结果:
因为Windows的控制台不能显⽰ utf-8 编码的内容, 所以我⽤ > 把结果输出到 11.txt 的⽂件中,
上⾯的截图中包含 11.txt 的内容, 可以看到汉字还是正确的.
< ⽂件的编码为 utf-8.
在⽂件以UTF-8编码保存时, 使⽤下⾯的⽅式可以正确显⽰:
同理当⽂件是以gb2312编码保存的时候, 可以省略这个参数,或者指定为 gb2312 就可以正常显⽰了:附: Linux 下你的代码的执⾏结果(⽂件的编码为 utf-8)
Linux 下我的Console的默认编码为UTF-8,所以可以正常显⽰UTF-8编码的汉字.
总结⼀下就是你源⽂件保存的编码,与你使⽤ new String 时传递的第⼆个参数不⼀致导致的.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。