- 浏览: 67442 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xiangxm:
xurichusheng 写道一些涉及到密码保存的就需要加密/ ...
3DES加密 -
xurichusheng:
一些涉及到密码保存的就需要加密/解密了。不需要解密的密码,如登 ...
3DES加密
package com.xiangxm.javatest.evangesoftdemo; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /*字符串 DESede(3DES) 加密解密*/ public class ThreeDes { /** * * @param args在java中调用sun公司提供的3DES加密解密算法时 * ,需要使 * * 用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: * * jce.jar * * security/US_export_policy.jar * * security/local_policy.jar * * ext/sunjce_provider.jar * */ private static final String Algorithm = "DESede"; // 定义加密算法,可用 // DES,DESede,Blowfish // keybyte为加密密钥,长度为24字节 // src为被加密的数据缓冲区(源) public static byte[] encryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src);// 在单一方面的加密或解密 } catch (java.security.NoSuchAlgorithmException e1) { // TODO: handle exception e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } // keybyte为加密密钥,长度为24字节 // src为加密后的缓冲区 public static byte[] decryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { // TODO: handle exception e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } public static void main(String[] args) { // TODO Auto-generated method stub // 添加新安全算法,如果用JCE就要把它添加进去 Security.addProvider(new com.sun.crypto.provider.SunJCE()); final byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36, (byte) 0xE2 }; // 24字节的密钥 String szSrc = "大公司的分公司的分公司的风格中华人民共和国感谢法"; System.out.println("加密前的字符串:" + szSrc); byte[] encoded = encryptMode(keyBytes, szSrc.getBytes()); System.out.println("加密后的字符串:" + new String(encoded)); byte[] srcBytes = decryptMode(keyBytes, encoded); System.out.println("解密后的字符串:" + (new String(srcBytes))); } }
----------------------------下面来自Oschina---------------------------------
package com.xiangxm.javatest.evangesoftdemo; import java.io.ByteArrayOutputStream; import java.security.*; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; /* *<p> *</p> *@author xiangxm *version 1.0 *2013-3-23 * * */ /** *字符串 DESede(3DES) 加密 */ public class Test3DES { private static final String Algorithm = "DESede"; // 定义 加密算法,可用 // DES,DESede,Blowfish private static final String hexString = "0123456789ABCDEF"; /** * * @param keybyte * 加密密钥,长度为24字节 * @param src * 字节数组(根据给定的字节数组构造一个密钥。 ) * @return */ public static byte[] encryptMode(byte[] keybyte, byte[] src) { try { // 根据给定的字节数组和算法构造一个密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } /** * * @param keybyte * 密钥 * @param src * 需要解密的数据 * @return */ public static byte[] decryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (java.lang.Exception e3) { e3.printStackTrace(); } return null; } /** * 字符串转为16进制 * * @param str * @return */ public static String encode(String str) { // 根据默认编码获取字节数组 byte[] bytes = str.getBytes(); StringBuilder sb = new StringBuilder(bytes.length * 2); // 将字节数组中每个字节拆解成2位16进制整数 for (int i = 0; i < bytes.length; i++) { sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4)); sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0)); } return sb.toString(); } /** * * @param bytes * @return 将16进制数字解码成字符串,适用于所有字符(包括中文) */ public static String decode(String bytes) { ByteArrayOutputStream baos = new ByteArrayOutputStream( bytes.length() / 2); // 将每2位16进制整数组装成一个字节 for (int i = 0; i < bytes.length(); i += 2) baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString .indexOf(bytes.charAt(i + 1)))); return new String(baos.toByteArray()); } // 转换成十六进制字符串 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; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); } public static void main(String[] args) { // 添加新安全算法,如果用JCE就要把它添加进去 // 这里addProvider方法是增加一个新的加密算法提供者(个人理解没有找到好的答案,求补充) Security.addProvider(new com.sun.crypto.provider.SunJCE()); // byte数组(用来生成密钥的) final byte[] keyBytes = { 0x11, 0x22, 0x4F, 0x58, (byte) 0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte) 0xCB, (byte) 0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte) 0x98, 0x30, 0x40, 0x36, (byte) 0xE2 }; String szSrc = "This is a 3DES test. 测试"; System.out.println("加密前的字符串:" + szSrc); byte[] encoded = encryptMode(keyBytes, szSrc.getBytes()); System.out.println("加密后的字符串:" + new String(encoded)); byte[] srcBytes = decryptMode(keyBytes, encoded); System.out.println("解密后的字符串:" + new String(srcBytes)); // ------------------------------------------------------------ String byt = "字符串转换为16进制"; byt = encode(byt); System.out.println(byt); byt = decode(byt); System.out.println(byt); } }
评论
2 楼
xiangxm
2013-04-10
xurichusheng 写道
一些涉及到密码保存的就需要加密/解密了。
不需要解密的密码,如登录密码,使用 md5 加密;
需要解密的密码,就可以使用这样的方式加密/解密 了。
不需要解密的密码,如登录密码,使用 md5 加密;
需要解密的密码,就可以使用这样的方式加密/解密 了。
多谢海哥指点
1 楼
xurichusheng
2013-04-10
一些涉及到密码保存的就需要加密/解密了。
不需要解密的密码,如登录密码,使用 md5 加密;
需要解密的密码,就可以使用这样的方式加密/解密 了。
不需要解密的密码,如登录密码,使用 md5 加密;
需要解密的密码,就可以使用这样的方式加密/解密 了。
发表评论
-
聊聊工作
2013-06-07 22:14 696最近比较忙,总有那么 ... -
点击屏幕其他地方动画消失
2013-05-29 22:05 2246功能需求描述: 自定义了一个控件,当触发按钮事件后动画移出来 ... -
回调函数
2013-05-17 23:22 910回调的使用在android 源码里面不少见: 这里截取了Vi ... -
ListView 使用实例。 类似于Fragment
2013-05-17 23:18 1124自定义适配器: // 自定义适配器 private c ... -
System.gc() in Java
2013-05-17 22:58 1275Java的的一个显著特点就是垃圾回收机制,关于垃圾回收机制 ... -
内部类
2013-05-05 17:33 0package com.xiangxm.javatest. ... -
解决could not create the java virtual machine问题(转)
2013-05-04 18:24 2174解决could not create the java vir ... -
以 2011-11-11 00:00:00 格式打印昨天的和明天的这个时候
2013-03-23 15:33 735之前遇到的面试题,重写一次。 package com.xi ... -
在MyEclipse中引入JDK源码(转)
2013-03-23 11:27 818源地址:在MyEclipse中引入JDK源码 很多朋友遇到过 ... -
java界面开发笔记
2013-03-14 17:03 0利用HTML显示多个Label JLabel label = ... -
eclipse java.lang.OutOfMemoryError: Java heap space 解决方案
2013-03-07 14:59 0可以在windows 更改系统环境变量加上JAVA_OPTS= ... -
URL的简单使用
2013-03-07 13:05 0URL的简单使用 /** * */ packa ... -
ClassLoader
2013-02-28 17:20 0ClassLoader一个经常出现又让很多人望而却步的词, ... -
Eclipse debug 使用(转)
2013-02-26 15:00 496Eclipse Debug不为人知的秘密 -
文件操作(delete files)
2013-02-24 12:15 1271package com.evangelsoft.cross ... -
MD5加密
2013-02-24 12:14 978package com.evangelsoft.cross ... -
Eclipse控制台中的中文输出乱码问题(转)
2013-02-22 17:43 607http://blog.sina.com.cn/s/blog_ ... -
解决中文乱码
2012-12-31 10:03 0荐于经常看到朋友说哪里出现中文乱码了,菜鸟我以自己在项目经 ... -
MyEclipse常用快捷键
2012-12-19 17:03 705红色部分为自己也经常用到的, (1)Ctrl+M切换窗口的大小 ... -
java常见面试题(转)搜集汇总
2012-12-19 11:16 1222一些Java面试中经常出现的算法题 1.现在输入n个 ...
相关推荐
标题中的“3DES加密解密工具”指的是一个用于执行三重数据加密标准(3DES,Triple DES)的软件工具,这种工具通常用于保护敏感数据的安全,确保信息在传输过程中的机密性。3DES是DES(Data Encryption Standard,...
6. **执行D3DES**:首先用第一个密钥执行DES加密,然后用第二个密钥执行DES解密,最后再用第一个密钥进行一次DES加密。这个过程就是D3DES的核心。 7. **密文后处理**:加密完成后,对密文进行逆初始置换,得到最终...
3DES(Triple Data Encryption Algorithm,三重数据加密算法)是一种强化版的DES(Data Encryption Standard)加密算法,它通过三次应用DES加密过程来提高安全性。在JavaScript中实现3DES加密通常是为了在网络通信中...
本篇文章将详细探讨Java环境下如何实现3DES加密算法,并介绍相关知识点。 首先,让我们了解3DES的工作原理。3DES是对原始DES算法的扩展,它通过执行三次加密过程来提高安全性。简而言之,3DES分为两种模式:EDE...
- **System.Security.Cryptography.TripleDESCryptoServiceProvider**:这是.NET框架提供的3DES加密服务类,通过实例化它可以获取到3DES加密器对象。 - **CreateEncryptor()** 和 **CreateDecryptor()**:这两个方法...
在C语言中实现3DES加密算法,可以确保在不同平台上的兼容性和一致性,尤其对于需要跨平台操作的应用场景,如将C语言代码移植到Android平台,通过JNI接口与Java代码交互,能够很好地解决加解密结果不一致的问题。...
标题中的“3DES加密解密”指的是在信息技术领域中,使用三重数据加密标准(3DES,Triple Data Encryption Standard)进行数据加密和解密的过程。3DES是一种加强版的DES加密算法,它通过三次应用DES的加密过程来提高...
本篇文章将深入探讨Delphi实现的3DES加密以及PKCS5Padding填充方法。 3DES,全称为三重数据加密标准(Triple Data Encryption Standard),是对原有的DES(Data Encryption Standard)算法的加强版。它通过三次应用...
Java 中的 3DES 加密解密示例(封装 byte 数组和 16 进制字符串互转) 在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES ...
对数据进行单DES或者3DES加密或者解密,如果密码长度为8字节则为DES加密或者解密
在C语言中实现3DES加密涉及到一系列的步骤和技术,以下将详细介绍3DES的工作原理、C语言实现的关键点以及相关的编程技巧。 1. **3DES工作原理** - 3DES由三个DES加密过程组成:EDE(加密-解密-加密)。首先,数据...
3DES加密解密的全工具类,快速帮助新人进行3Des加密解密
总的来说,理解和实现3DES加密算法需要对位操作、循环和模式有深入的理解,同时需要关注加密过程中的安全性和效率。C++代码段可以作为一个学习和研究3DES的实用工具,帮助我们更好地理解加密算法的工作原理。
3DES,全称为三重数据加密标准(Triple Data Encryption Algorithm),是DES加密算法的一种强化版本。DES是一种古老的对称加密算法,由IBM在1970年代初开发,后被美国国家标准局采纳为商业和政府的标准。然而,随着...
本篇文章将深入探讨C#中实现3DES加密解密的方法。 3DES的工作原理是通过三次应用DES算法来提高安全性。它将明文分成64位的数据块,然后用三个不同的密钥进行三次独立的DES加密过程:一次加密、一次解密、再一次加密...
标题中的“3DES加密”指的是Triple DES(三重数据加密标准),它是一种广泛使用的对称加密算法,基于DES(Data Encryption Standard)并将其安全性增强了三倍。DES原本使用56位密钥,3DES通过三次独立的DES加密过程...
在C++中实现3DES加密,需要包含相关库,如`<openssl/des.h>`。首先,你需要创建一个3DES上下文环境,设置密钥,然后可以进行加密和解密操作。以下是一个简化的3DES加密过程: ```cpp #include <openssl/des.h> ...
标题 "3DES加密解密" 涉及到的是数据安全领域中的一种常见的对称加密算法——三重DES(Triple DES)。此算法是基于原始的DES(Data Encryption Standard)算法,通过三次加密过程增强了其安全性。以下是关于3DES及其...
通常,服务器会提供一个公钥,客户端使用这个公钥加密3DES的密钥,然后发送给服务器,服务器用私钥解密得到3DES密钥,这样即使在传输过程中密钥被截获,也无法解密数据,因为攻击者没有私钥。 最后,"下载须知 ---...
3des加密算法的C语言实现,很好很实用