- 浏览: 269069 次
- 性别:
- 来自: 江西
文章分类
最新评论
-
hiben:
[list][*][list][*][*][*][/list] ...
多数据源的配置和切换 -
bqmcjl:
大哥。我项目里边怎么没有AbstractRoutingData ...
多数据源的配置和切换 -
zhouchuang:
y
java中的分页处理 -
hm2008:
...
父母不会站在原地等你 (推荐) -
tamsiuloong:
简单是简单 效率相当低
最简单的java 克隆实现
请看代码,这是3Des最简单的加解密过程:
/** * <pre> * Title: OaKeyHandle.java * Project: taxs_Portal * Type: com.tenpay.taxs.web.util.OaKeyHandle * Author: ben.liu * Create: May 15, 2008 11:41:09 AM * Copyright: Copyright (c) 2008 * Company: * <pre> */ /** * <pre> * 用户登录解密 * </pre> * * @author ben.liu * @version 1.0, May 15, 2008 */ import java.security.SecureRandom; import java.security.spec.KeySpec; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; public class OaKeyHandle { // DES3 解密 public static String decryptEde(String key, String src) // throws // DecryptException { String plainText = null; try { byte[] keyBytes = new byte[24]; // DES3 为24Bytes密钥 asciiToBcdBytes(key, keyBytes, Math.min(32, key.length()) / 2); for (int i = 0; i < 8; ++i) keyBytes[16 + i] = keyBytes[i]; // 从原始密匙数据创建一个DESKeySpec对象 KeySpec dks = new DESedeKeySpec(keyBytes); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成 // 一个SecretKey对象 SecretKey secKey = SecretKeyFactory.getInstance("DESede").generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding"); // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, secKey, sr); int count = (src.length() + 1) / 2; byte[] inputBytes = new byte[count]; asciiToBcdBytes(src, inputBytes, count); // 正式执行解密操作 byte[] decryptBytes = cipher.doFinal(inputBytes); int olen = decryptBytes.length - 1; for (; decryptBytes[olen] == 0 && olen >= 0; --olen) { } plainText = new String(decryptBytes, 0, olen + 1); } catch (Exception e) { e.printStackTrace(); } return plainText; } private static void asciiToBcdBytes(String str, byte[] hex, int count)// throws // Exception { byte[] inputBytes = str.getBytes(); for (int i = 0, j = 0; j < inputBytes.length && i < count; ++i) { byte v = inputBytes[j]; ++j; if (v <= 0x39) hex[i] = (byte) (v - 0x30); else hex[i] = (byte) (v - 0x41 + 10); hex[i] <<= 4; if (j >= inputBytes.length) break; v = inputBytes[j]; ++j; if (v <= 0x39) hex[i] += (byte) (v - 0x30); else hex[i] += (byte) (v - 0x41 + 10); } } /** * 加密 * */ public static String encryptEde(String key, String src)// throws // DecryptException { String plainText = null; try { byte[] keyBytes = new byte[24]; // DES3 为24Bytes密钥 asciiToBcdBytes(key, keyBytes, Math.min(32, key.length()) / 2); for (int i = 0; i < 8; ++i) keyBytes[16 + i] = keyBytes[i]; // 从原始密匙数据创建一个DESKeySpec对象 KeySpec dks = new DESedeKeySpec(keyBytes); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成 // 一个SecretKey对象 SecretKey secKey = SecretKeyFactory.getInstance("DESede").generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding"); // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, secKey, sr); byte[] srcBytes = src.getBytes("GBK"); int srcLen = srcBytes.length; int encLen = ((srcLen % 8) == 0) ? srcLen : ((srcLen / 8 + 1) * 8); byte[] encBytes = new byte[encLen]; System.arraycopy(srcBytes, 0, encBytes, 0, srcLen); // 正式执行解密操作 byte[] encryptBytes = cipher.doFinal(encBytes); plainText = bcdBytesToAscii(encryptBytes, encLen); } catch (Exception e) { e.printStackTrace(); } return plainText; } private static String bcdBytesToAscii(byte[] hex, int count)// throws // Exception { byte[] ascii = new byte[2 * count]; int t; for (int i = 0; i < count; i++) { t = hex[i] & 0xf0; t = t >> 4; if (t <= 9) t += '0'; else if (t >= 10 && t <= 15) t += 'A' - 10; else t = '0'; ascii[2 * i] = (byte) t; t = hex[i] & 0x0f; if (t <= 9) t += '0'; else if (t >= 10 && t <= 15) t += 'A' - 10; else t = '0'; ascii[2 * i + 1] = (byte) t; } return (new String(ascii)); } /** * 解密商户系统登录用户信息 */ public static String[] onProcess(String passport, String key) { // 获取来自oa的请求信息 String loginParam = passport; if (null == loginParam) { return null; } // 解密来自oa的用户信息 String[] usrInfo = decryptEde(key, loginParam).split("&"); if (usrInfo.length < 3) { return null; } return usrInfo; } }
发表评论
-
spring quartz 任务调度
2011-07-07 15:29 1124最简单的配置如下:默认是一分钟执行一次 <bean i ... -
spring、hibernate等开源框架svn源码地址
2011-02-10 08:58 4065很多优秀的开源项目已经提供SVN源码签出,下面是各源码的svn ... -
eclipse启动错误:JVM terminated. Exit code=-1
2009-12-02 10:08 2209在eclipse.ini文件的开始增加下列vm的设置。下面是我 ... -
weblogic8.1的ejb服务问题
2009-09-27 10:11 1342在宁夏电信的开发中,发现在调用weblogic8.1的ejb服 ... -
多数据源的配置和切换
2009-02-06 11:13 7779[color=green] 项目中用到过多数据源之间的切换,从 ... -
js checkbox 全选 全不选 代码
2008-12-17 14:32 2445/* *obj 当前对象(this) *cName 子选项名称 ... -
最简单的java 克隆实现
2008-09-25 17:23 5240先定义一个标准的javabean对象,并实现持久化接口 请看代 ... -
java 代理机制实现
2008-09-25 15:56 2311Proxy 模式 代理的主要类:java.lang.re ... -
js 级联下拉框的生成
2008-09-17 17:57 3846最近做页面时,碰到js级联下拉框显示的问题。先用下拉框选择大类 ... -
ant脚本(部署应用)
2008-09-04 18:27 2678最近在部署应用时,遇到一个问题,就是ant脚本登录到linux ... -
struts+spring+sitemesh下的中文乱码问题
2008-04-14 17:25 2748最近有个项目用struts+spring+sitemesh做的 ... -
spring jdbcTemplate 操作接口使用
2008-04-10 22:56 3431import java.sql.CallableState ... -
spring jdbcTemplate 实现批量更新操作接口使用
2008-04-10 22:52 16609批量更新操作使用如下代码: public int[] up ... -
struts下的分页实现
2008-04-10 13:24 1583ActionForm 基类 BaseForm的代码如下: ... -
java中的正则表达式
2007-10-29 11:00 2007如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一 ... -
spring AOP
2007-08-09 16:39 1621这是在网上发现的一篇关于Spring AOP编程的教程,读完这 ... -
Tomcat内存设置从windows服务启动不生效?
2007-08-09 16:24 8704... -
java中用URLConnection 类post方式提交表单
2007-07-02 09:43 29774/** * <pre> * Title: ... -
转贴hibernate2.1与hibernate3.0的区别
2007-03-09 16:03 4485尽管Hibernate 3.0 与Hibernate2.1的源 ... -
各种数据库的jdbc驱动下载及连接方式
2007-03-07 16:46 35127各种数据库驱动 ...
相关推荐
标题中的“3DES加密解密工具”指的是一个用于执行三重数据加密标准(3DES,Triple DES)的软件工具,这种工具通常用于保护敏感数据的安全,确保信息在传输过程中的机密性。3DES是DES(Data Encryption Standard,...
描述中提到的"加出来和你文档上的不一样我负责"可能是指提供的代码实现与文档中描述的3DES加密解密方法可能存在差异,但开发者对此负责,意味着他们对代码的正确性和可靠性有信心。"DES3encrypt"和"DES3decrypt"是...
本项目是使用Visual C++实现3DES加解密功能的一个实例,下面将详细介绍3DES算法及其在Visual C++中的实现。 3DES,全称为三重DES,是对DES(Data Encryption Standard)的加强版。DES是一种块密码,采用64位的数据...
标题 "3DES加密解密" 涉及到的是数据安全领域中的一种...在Java开发中,可以通过Bouncy Castle这样的加密库实现3DES的加解密操作。提供的文件可能包含3DES算法的Java实现代码,可以进一步研究学习其工作原理和应用。
源码并没有写出3DES加解密过程,而是用java写的, 将java打包成jar包提供给易语言调用。至于这个东西有什么用? 方便web交互数据,php java都是支持的。 @zhao6810。
`3des加解密.c`可能是主程序,它调用了`d3des.cpp`中定义的函数,而`d3des.h`可能包含了加密解密函数的声明。通过阅读和理解这些代码,可以学习到如何在实际项目中应用DES和3DES。 总的来说,DES和3DES是密码学中的...
3. **解密过程**: - Java中,同样使用`Cipher`类,但这次设置为解密模式(如`Cipher.DECRYPT_MODE`),然后调用`doFinal`解密加密后的数据。 - JavaScript中,使用`Crypto.subtle.decrypt`方法进行解密。 4. **...
4. **加解密过程**:DES的加密和解密过程非常相似,只是在某些步骤中使用了相反的操作。解密时,只需将加密过程中的子密钥顺序反转,并应用相反的非线性函数。 在给定的“des加密例程”中,可能包含了一个调用动态...
4. **逆过程**:解密过程与加密过程基本相反,使用逆初始置换(IP^-1),逆S盒和逆P盒,以及相同的子密钥,只是应用顺序相反。 在MFC中,你可以创建一个名为`DES`的类,包含`Encrypt`和`Decrypt`方法。这些方法将...
RSA加密和3DES加解密是两种常见的对称与非对称加密算法,在信息安全领域有着广泛应用。在JAVA环境中,这两种加密技术提供了数据保护的重要手段,确保了敏感信息在网络传输过程中的安全。 首先,RSA(Rivest-Shamir-...
在JavaScript环境中,DES加解密可以用于保护敏感数据,如用户密码、API密钥等,确保在网络传输中数据的安全性。 在JavaScript中实现DES加解密,通常需要借助库,如`crypto-js`。这个库提供了多种加密算法,包括DES...
DES加密解密过程,C++实现
3DES的过程包括三个阶段:加密-解密-加密(EDE)或解密-加密-解密(DEC),这取决于密钥的配置。 1. **加密-解密-加密(EDE)模式**: - 第一次加密:使用第一个密钥K1对明文进行DES加密,得到中间密文C1。 - 第...
在C语言中实现3DES加解密,需要理解DES的S盒(Substitution Box)、P盒(Permutation Box)以及F函数等核心概念。同时,需要实现将64位的输入数据块按照DES规则进行处理的函数,包括初始置换、扩展置换、异或操作、8...
下面我们将详细讨论C#实现DES加解密的相关知识点。 1. **基本概念**: - **对称加密**:加密和解密使用同一密钥。 - **DES算法**:基于Feistel结构,通过多次迭代实现数据的加密和解密。 - **密钥长度**:DES的...
解密过程与加密类似,但在`decryptMode`方法中,`Cipher`实例初始化为解密模式(Cipher.DECRYPT_MODE),并使用同样的密钥对加密后的数据进行解密。 3DES算法的安全性在于其使用了三个不同的56位DES密钥(总共168位...
这款工具的优点在于用户可以本地运行,避免了在线加解密可能带来的密钥泄露风险,确保了数据安全性。用户只需要输入相应的密钥和待处理的数据,工具就能完成加密或解密过程。对于需要保护敏感信息的个人或企业来说,...
在实现DES加密解密的过程中,首先需要理解DES的基本步骤,包括初始置换、扩展置换、8轮Feistel网络、逆扩展置换和逆初始置换。在MFC环境中,这些步骤可以通过定义类和函数来实现。例如,可以创建一个名为`CDES`的类...