import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec; import org.apache.commons.codec.BinaryDecoder;
import org.apache.commons.codec.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 = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
System.out.println(keyGenerator.getAlgorithm());
System.out.println(keyGenerator.getProvider()); SecretKey secretKey = keyGenerator.generateKey();
byte[] bytesKey = secretKey.getEncoded();
System.out.println(secretKey.getAlgorithm());
System.out.println(secretKey.getFormat()); //通过KEY转换生成密钥
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
SecretKey convertedKey = factory.generateSecret(desKeySpec); //加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");// 算法/工作方式/填充方式
cipher.init(Cipher.ENCRYPT_MODE, convertedKey);
byte[] result = cipher.doFinal("要加密的内容".getBytes());
System.out.println("jdk des encrypt:" + Hex.encodeHexString(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 个回答

 
答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问

还是楼主的代码, 没发现什么乱码:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec; public class DESDemo {
public static void main(String[] args)
{
try{
//生成KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
System.out.println(keyGenerator.getAlgorithm());
System.out.println(keyGenerator.getProvider()); SecretKey secretKey = keyGenerator.generateKey();
byte[] bytesKey = secretKey.getEncoded();
System.out.println(secretKey.getAlgorithm());
System.out.println(secretKey.getFormat()); //通过KEY转换生成密钥
DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
SecretKey convertedKey = factory.generateSecret(desKeySpec); //加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");// 算法/工作方式/填充方式
cipher.init(Cipher.ENCRYPT_MODE, convertedKey);
byte[] result = cipher.doFinal("要加密的内容".getBytes()); //解密
cipher.init(Cipher.DECRYPT_MODE,convertedKey);
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 的内容, 可以看到汉字还是正确的.
11.txt 文件的编码为 utf-8.

在文件以UTF-8编码保存时, 使用下面的方式可以正确显示:

同理当文件是以gb2312编码保存的时候, 可以省略这个参数,或者指定为 gb2312 就可以正常显示了:


附: Linux 下你的代码的执行结果(文件的编码为 utf-8)
Linux 下我的Console的默认编码为UTF-8,所以可以正常显示UTF-8编码的汉字.

总结一下就是 你源文件保存的编码,与你使用 new String 时传递的第二个参数 不一致导致的.


java加解密操作过程中的中文乱码问题的更多相关文章

  1. Java Web 开发中的中文乱码与解决方式

    乱码产生的原因 不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的.以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器 ...

  2. java中读取文本文件的时候@Test方法中没有中文乱码,但是@Controller中却有中文乱码

    今天遇到了一个非常牛逼的BUG,在@Test标注的测试类中没有中文乱码,但是访问@Controller标注的接口却报中文乱码,找了一系列资料以及各种尝试之后,发现是因为eclipse编辑工具字符编码的 ...

  3. 6. Java 加解密技术系列之 3DES

    Java 加解密技术系列之 3DES 序 背景 概念 原理 代码实现 结束语 序 上一篇文章讲的是对称加密算法 — — DES,这篇文章打算在 DES 的基础上,继续多讲一点,也就是 3 重 DES ...

  4. 3.Java 加解密技术系列之 SHA

    Java 加解密技术系列之 SHA 序 背景 正文 SHA-1 与 MD5 的比较 代码实现 结束语 序 上一篇文章中介绍了基本的单向加密算法 — — MD5,也大致的说了说它实现的原理.这篇文章继续 ...

  5. 2.Java 加解密技术系列之 MD5

    Java 加解密技术系列之 MD5 序 背景 正文 结束语 序 上一篇文章中,介绍了最基础的编码方式 — — BASE64,也简单的提了一下编码的原理.这篇文章继续加解密的系列,当然也是介绍比较基础的 ...

  6. 1.Java 加解密技术系列之 BASE64

    Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...

  7. 160829、Java加解密与数字签名

    ** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...

  8. Java加解密与数字签名

    ** Java加解密 ** 实现方式:JDK实现,CC,BC JDK提供比较基础的底层的实现:CC提供一些简化的操作:BC提供补充 一.Base64加密 非常简单,加密解密就一个函数. 代码如下: 二 ...

  9. 编码问题(.java/.jsp/.js等文件的中文乱码)

    乱码的出现是因为编码与解码的不一致造成的,假如你对“中文”两个字进行了gbk格式的保存,却用utf-8格式的解读,是肯定会出现乱码的. 如何避免中文乱码:应用上下统一用一种编码格式. utf-8或者g ...

随机推荐

  1. 数据库性能调优——sql语句优化(转载及整理) —— 篇2

    下面是在网上搜集的一些个人认为比较正确的调优方案,如有错误望指出,定虚心改正 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中 ...

  2. 【SVN】Unable to connect to a repository at URL 'svn://localhost/Test'

    早上配置SVN,但是这次不是那么顺利... 环境: Windows 7 SVN服务器端:CollabNetSubversion-server-1.8.13-1 SVN客户端:TortoiseSVN_V ...

  3. Cron 表达式详解和案例

    1. cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2. cron表达式各占位符解释: {秒数} ==> 允许值范围: 0~59 ,不允许 ...

  4. Centos7安装配置gitlab

    Centos7安装配置gitlab 这篇文字我会介绍在Centos7上安装gitlab,配置gitlab的smtp,并且创建项目demo. sudo yum install openssh-serve ...

  5. IE8下解决position:flxed无效的问题

    只需将文档类型声明改成如下方式即可 <!DOCTYPE html>

  6. 用python自定义实现db2的连接池

    想要模仿zabbix的oracle插件orabix来实现对db2的监控,但是Java能力有限,就用python来实现了.但是python常用的连接池PooledDB似乎并不支持db2,一直报这样的错误 ...

  7. Javascript中length属性的总结

    Javascript中length属性的总结 一.StringObject中的length     length属性是返回字符串的字符数目. 例如: // 普通字符串 var str = " ...

  8. HttpClent4.3 的例子

    package com.unbank.robotspider.util; import java.io.IOException; import java.net.MalformedURLExcepti ...

  9. CS193P学习笔记(一)

    1>iOS系统分层   1.Core OS 核心操作系统层,很接近硬件的一层: 本质是一个Unix内核,使用基于BSD的Unix版本,拥有文件系统.套接字.权限等一系列Unix所具有的特性,并且 ...

  10. [转载]在iTOP-4412开发板上调试helloworld应用

    本文转自迅为论坛:http://www.topeetboard.com 1.安装ADB驱动 在开发板上调试 Android 应用,首先要安装 ADB 驱动. 通过“SDK Manager.exe”来安 ...