- 浏览: 281932 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (153)
- unix (2)
- sql (3)
- pl/sql (1)
- cvs (1)
- core java (36)
- OOAD UML (1)
- XML (4)
- JDBC (5)
- Hibernate (1)
- HTML (1)
- javascript (2)
- servlet (2)
- jsp (1)
- AJAX (1)
- Struts1.x (0)
- Struts2.x (5)
- Spring (6)
- EJB (2)
- WebService (2)
- 生活 (2)
- 感情 (0)
- 其他 (9)
- jbuilder2005 (1)
- db2 (1)
- groovy (1)
- 银行业务 (1)
- Android (9)
- java设计模式 (8)
- J2SE (2)
- DataBase (4)
- lucene (2)
- java卡 (1)
- flex (3)
- 烹饪 (1)
- 测试 (1)
- java硬件 (2)
- upnp (3)
- S2SH lib (1)
- nio CshBBrain (1)
- socket (1)
- 二维码 (1)
- 热加载 (1)
- hadoop (3)
- NIO (1)
- 新银行前置机预研 (1)
- springmvc3 (1)
- jvm (1)
- sf (0)
最新评论
-
niwowl:
可以!
gson使用在android使用例子 -
smallbee:
xin_jmail 写道首先感谢楼主的文章,让我知道了lock ...
java ReentrantLock Condition调试记录 -
xin_jmail:
首先感谢楼主的文章,让我知道了lock.newConditio ...
java ReentrantLock Condition调试记录 -
smallbee:
brad2309 写道lz 你的两个messageReceiv ...
基于Apache Mina实现的TCP长连接和短连接实例 -
brad2309:
lz 你的两个messageReceived方法是不是错乱了
基于Apache Mina实现的TCP长连接和短连接实例
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性
package com.cmb.fbcbcserver; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class DesEncrypter { private Cipher ecipher; //加密器 private Cipher dcipher; //解密器 public DesEncrypter(SecretKey key) { try { ecipher = Cipher.getInstance("DES"); dcipher = Cipher.getInstance("DES"); ecipher.init(Cipher.ENCRYPT_MODE, key); dcipher.init(Cipher.DECRYPT_MODE, key); } catch (Exception e) { e.printStackTrace(); } } public String encrypt(String str) { try { // Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes("ISO-8859-1"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (Exception e) { e.printStackTrace(); } return null; } public String decrypt(String str) { try { // Decode base64 to get bytes byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte[] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "ISO-8859-1"); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { try { // 生成临时密钥。在实践中,你要保存这个密钥 SecretKey key = KeyGenerator.getInstance("DES").generateKey(); DesEncrypter encrypter = new DesEncrypter(key); // Encrypt String encrypted = encrypter.encrypt("Don't tell anybody!"); System.out.println("加密后数据:" + encrypted); // Decrypt String decrypted = encrypter.decrypt(encrypted); System.out.println("解密后数据:" + decrypted); } catch (Exception e) { e.printStackTrace(); } } }
在开发中,key一般都要自己制定,然后给客户,下面代码自定义key:
package com.cmb.fbcbcserver; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; /** * 字符串工具集合 * @author Liudong */ public class StringUtils { private static final String PASSWORD_CRYPT_KEY = "__jDlog_"; private final static String DES = "DES"; /** * 加密 * @param src 数据源 * @param key 密钥,长度必须是8的倍数 * @return 返回加密后的数据 * @throws Exception */ public static byte[] encrypt(byte[] src, byte[] key) throws Exception { //DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密匙数据创建DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 创建一个密匙工厂,然后用它把DESKeySpec转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); // 现在,获取数据并加密 // 正式执行加密操作 return cipher.doFinal(src); } /** * 解密 * @param src 数据源 * @param key 密钥,长度必须是8的倍数 * @return 返回解密后的原始数据 * @throws Exception */ public static byte[] decrypt(byte[] src, byte[] key) throws Exception { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密匙数据创建一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey, sr); // 现在,获取数据并解密 // 正式执行解密操作 return cipher.doFinal(src); } /** * 密码解密 * @param data * @return * @throws Exception */ public final static String decrypt(String data) { try { return new String(decrypt(hex2byte(data.getBytes()), PASSWORD_CRYPT_KEY.getBytes())); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 密码加密 * @param password * @return * @throws Exception */ public final static String encrypt(String password) { try { return byte2hex(encrypt(password.getBytes(), PASSWORD_CRYPT_KEY .getBytes())); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 二行制转字符串 * @param b * @return */ public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; } return hs.toUpperCase(); } public static byte[] hex2byte(byte[] b) { if ((b.length % 2) != 0) throw new IllegalArgumentException("长度不是偶数"); byte[] b2 = new byte[b.length / 2]; for (int n = 0; n < b.length; n += 2) { String item = new String(b, n, 2); b2[n / 2] = (byte) Integer.parseInt(item, 16); } return b2; } public static void main(String[] args) { try { String ss = "我的是"; String dd = encrypt(ss); System.out.println("encode:" + dd); String src = decrypt(dd); System.out.println("DECODE:" + src); } catch (Exception e) { e.printStackTrace(); } } }
结果:
encode:F8FA58D40607D9E5
DECODE:我的是
发表评论
-
bike1
2015-12-07 17:10 0rt -
GPRS打印机的原理
2015-07-31 09:09 751一、什么是GPRS无线打印 ... -
关于 expression="execution(* com.xy.service.*.*(..))"
2015-05-21 09:22 2654先来看看这个spring的配 ... -
md5 sha1 java和javascript实现
2015-05-21 08:11 874<%@ page language="ja ... -
RSA帮助类
2014-11-21 09:36 921package com.cmb.fmserver.passp ... -
src2014-2-17
2014-02-17 21:55 0rt -
springmvc例子
2014-02-11 11:09 0rt -
qhdescjyw
2014-02-11 10:33 0rt -
按字节截取含有中文汉字的字符串
2013-05-07 18:55 3098要求实现一个按字节截取字符串的方法,比如对于字符串&quo ... -
SSL多线程安全问题
2013-04-23 15:44 1756项目原因,代码实现 ... -
wait notify 对象锁
2013-03-14 15:21 1158通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的 ... -
eclipse下配置hadoop环境
2012-12-05 11:44 1413按照http://smallbee.iteye.com ... -
centos虚拟机上安装运行hadoop(伪分布)
2012-11-15 15:28 19551、先在确认能否不输入口令就用ssh登录localhost: ... -
nio 远程主机强迫关闭了一个现有的连接 解决方案
2012-10-17 12:37 4599nio编程过程中会出现: Exception in thre ... -
java nio过程
2012-10-17 11:32 12331、服务端:ServerSocketChannel进行监听,注 ... -
socket 客户端连接池实现
2012-10-15 16:58 6711本文参考:http://cache.baidu.com/c?m ... -
java dom 解析xml例子
2012-08-02 14:09 1555XML格式如下: <?xml version=&quo ... -
DM5 java 例子
2012-08-02 10:38 1241package com.cmb.fbcbcserver; ... -
HTTP短连接模拟长连接 连接数不能超过2个
2012-08-01 15:47 2025项目中有用到服务器推技术,也是由于环境因素,银行系统,行内机房 ... -
java注解使用例子
2012-07-30 11:50 11781、注解定义: import java.lang.annot ...
相关推荐
DES(Data Encryption Standard)是一种广泛使用的对称加密算法,它基于块加密,每个块大小为64位。DES算法在1970年代被美国国家标准局(NIST)采纳为数据加密标准,至今仍被广泛使用,尽管其安全性在现代已经被AES...
由于这是一个带有例子的资源,你可能能够找到关于如何使用Python或其他编程语言实现DES和3DES加密解密的具体代码示例。这些示例通常会包含密钥生成、加密过程、解密过程以及如何验证解密后的数据是否与原文一致的...
DES(Data Encryption Standard)是一种经典的对称加密算法,1977年被美国国家标准局(NIST)采纳为数据加密标准。它使用56位密钥对64位的数据块进行加密,通过一系列复杂的数学变换实现信息的安全保护。3DES...
以下是一个简单的使用crypto-js实现DES加解密的例子: ```javascript // 引入crypto-js库 const CryptoJS = require("crypto-js"); // 定义密钥和初始化向量 const key = CryptoJS.enc.Utf8.parse("密钥"); const ...
标题中的"Delphi Java DES互相通用的例子"表明我们将探讨如何在Delphi和Java之间使用DES(Data Encryption Standard)加密算法进行互操作。DES是一种广泛使用的对称加密算法,用于保护数据的安全性。在这个例子中,...
D3DES是一种加强版的DES(Data Encryption Standard)算法,它通过两次应用DES算法来提高安全性。 首先,我们要理解DES加密的基本原理。DES是一种块加密算法,它将64位的数据块(其中忽略8位奇偶校验位)作为输入,...
这个"VC 使用DES加密算法的例子代码"是一个实用的示例,它展示了如何在VC++项目中应用DES加密。源码通常包含以下几个关键部分: 1. **DES算法的核心实现**:DES算法基于Feistel网络,包括64位的输入和64位的密钥。...
在这个例子中,我们使用了CBC(Cipher Block Chaining)模式,这是一种常见的块加密模式,每个块的加密都会受到前一块的影响,增加了安全性。 在实际项目中,你需要根据具体需求处理输入输出数据,例如从文件读取...
AES_DES_加密的C#例子: void Des_ProgressChanged(object o, ProgressEventArgs args) { TSElapsed = DateTime.Now.Subtract(DTStart); string Elapsed = TSElapsed.Hours.ToString("D2") + ":" + TSElapsed....
4. **创建加密和解密对象**:使用`DES_EDE3`或`DES_EDE2`(三重DES或双密钥DES)来增强安全性,创建加密和解密对象,如`DES_EDE3::Encryption encryptor(key, sizeof(key))`和`DES_EDE3::Decryption decryptor(key, ...
本篇将深入探讨"C# des对称加密字符串实例"相关的知识点。 DES(Data Encryption Standard)是对称加密算法的一种,它使用相同的密钥进行加密和解密。尽管DES现在已被更安全的AES(Advanced Encryption Standard)...
总结来说,这个“Qt写的DES加密算法展示程序”是一个学习和实践密码学的好例子,它结合了经典的DES加密算法和现代的Qt开发框架。对于希望了解这两方面的开发者,这是一个很好的起点,可以从中探索数据安全和GUI编程...
在Java编程语言中,数据加密标准(DES,Data Encryption Standard)是一种常见的对称加密算法,用于保护敏感数据的安全。DES最初是由IBM开发的,并在1977年被美国国家标准局(NIST)采纳为标准。然而,由于其较短的...
DES加密算法及示例
总结来说,DES算法是密码学中的一个经典例子,它展示了如何通过复杂的运算过程来保护信息安全。虽然现在已经不再推荐使用,但了解DES有助于我们理解现代加密算法的基础和设计原理,对深入学习密码学有着重要的意义。
总的来说,DES加密算法是计算机科学中对称加密的经典例子,虽然在现代已不再作为主要加密标准,但它仍然是理解加密原理和学习密码学的重要教材。通过C++实现DES,不仅可以提升编程技能,还能增强对信息安全的理解。
在这个例子中,`encrypt_CBC`和`decrypt_CBC`函数分别实现了加密和解密过程。注意,DES_ede3_cbc_encrypt函数使用了3重DES(TDES),这是为了增强DES的强度,因为单个DES的56位密钥可能不够安全。 在实际应用中,你...
des 加解密例子,很实用,java语言开发,欢迎下载