package com.dc; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /* ****************** 类说明 ********************* * class : DcDESUtil * @author : ncc * create time : 2017-12-8 下午05:46:02 * @version : 1.0 * description : DES加密解密类 * DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的 * 对称密码体制加密算法。 明文按64位进行分组, 密钥长64位,密钥事实上是56位参与DES运算 * (第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组 * 和56位的密钥按位替代或交换的方法形成密文组的加密方法 * @see : * ************************************************/ public class DcDESUtil { private static final int ENCRYPT_MODE = 1; // 加密模式 private static final int DECRYPT_MODE = 2; // 解密模式 // 密钥 private static byte[] DEFKEY = "wPSnMdH3".getBytes(); /* ******************************************** * method name : enc_des * description : DES加密方法 * @return : String 加密后的密文 * @param : @param showInfo 需要加密的明文信息 * @param : @return * modified : ncc , 2017-12-8 * @see : * ********************************************/ public static String enc_des(String showInfo){ byte[] result = null; try { byte[] tmp = showInfo.getBytes("GBK"); result = cipher(tmp, DEFKEY, ENCRYPT_MODE, "DES"); } catch (Exception e) { e.printStackTrace(); } return null == result ? null : b2hex(result); } /* ******************************************** * method name : dec_des * description : DES解密方法 * @return : String 解密后的明文 * @param : @param encryInfo 要解密的密文 * @param : @return * @param : @throws IllegalBlockSizeException * @param : @throws IllegalArgumentException * modified : ncc , 2017-12-8 * @see : * ********************************************/ public static String dec_des(String encryInfo) throws IllegalBlockSizeException,IllegalArgumentException { byte[] result = null; String resultStr = null; try { try { byte[] tmp = hex2b(encryInfo); result = cipher(tmp,DEFKEY, DECRYPT_MODE, "DES"); resultStr = new String(result,"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return resultStr; } catch (ArrayIndexOutOfBoundsException e) {//base64抛出数组越界 throw new IllegalBlockSizeException(e.getMessage()); } catch (NullPointerException e) { throw new IllegalBlockSizeException(e.getMessage()); } } /* ******************************************** * method name : dec_des * description : des解密方法 * @return : String * @param : @param encryInfo 密文 * @param : @param key 密钥 * @param : @return * @param : @throws IllegalBlockSizeException * @param : @throws IllegalArgumentException * modified : ncc , 2017-12-8 * @see : * ********************************************/ public static String dec_des(String encryInfo, byte[] key) throws IllegalBlockSizeException,IllegalArgumentException { byte[] result = null; String resultStr = null; try { try { byte[] tmp = hex2b(encryInfo); result = cipher(tmp,key, DECRYPT_MODE, "DES"); resultStr = new String(result,"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return resultStr; } catch (ArrayIndexOutOfBoundsException e) {//base64抛出数组越界 throw new IllegalBlockSizeException(e.getMessage()); } catch (NullPointerException e) { throw new IllegalBlockSizeException(e.getMessage()); } } /* ******************************************** * method name : cipher * description : 加密解密工具方法 * @return : byte[] * @param : @param binfo 原字符数组 * @param : @param bkey 密钥 * @param : @param mode 模式(加密/解密) * @param : @param transformation 加密解密方式 * @param : @return * @param : @throws IllegalBlockSizeException * modified : ncc , 2017-12-8 * @see : * ********************************************/ private static byte[] cipher(byte[] binfo, byte[] bkey, int mode, String transformation) throws IllegalBlockSizeException { String algs[] = transformation.split("/"); SecretKey key = new SecretKeySpec(bkey, algs[0]); Cipher cipher = null; byte[] result = null; try { cipher = Cipher.getInstance(transformation); cipher.init(mode, key); result = cipher.doFinal(binfo); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return result; } /* ******************************************** * method name : b2hex * description : 二进制转换成十六进制 * @return : String * @param : @param bs * @param : @return * modified : ncc , 2017-12-8 * @see : * ********************************************/ private static String b2hex(byte[] bs) { int iLen = bs.length; // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍 StringBuffer sb = new StringBuffer(iLen * 2); for (int i = 0; i < iLen; i++) { int intTmp = bs[i]; // 把负数转换为正数 while (intTmp < 0) { intTmp = intTmp + 256; } // 小于0F的数需要在前面补0 if (intTmp < 16) { sb.append("0"); } sb.append(Integer.toString(intTmp, 16)); } return sb.toString(); } /* ******************************************** * method name : hex2b * description : 十六进制转换二进制 * @return : byte[] * @param : @param str * @param : @return * @param : @throws UnsupportedEncodingException * modified : ncc , 2017-12-8 * @see : * ********************************************/ private static byte[] hex2b(String str) throws UnsupportedEncodingException { byte[] arrB = str.getBytes("GBK"); int iLen = arrB.length; // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2 byte[] arrOut = new byte[iLen / 2]; for (int i = 0; i < iLen; i = i + 2) { String strTmp = new String(arrB, i, 2,"GBK"); arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16); } return arrOut; } public static void main(String[] args) { String str = "欢迎光临得草之家"; String strEnc = DcDESUtil.enc_des(str); System.out.println("str==" + str); System.out.println("strEnc==" + strEnc); try { String strdec = DcDESUtil.dec_des(strEnc); System.out.println("strdec==" + strdec); } catch (IllegalBlockSizeException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalArgumentException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { System.out.println("******************************"); System.out.println(DcDESUtil.dec_des("747afb83ae979a5ef5d0f5742b4a72184774773ec4fc58b3", "lSbEGkW7".getBytes())); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { System.out.println(e); } } }
相关推荐
C#的字符串加密码类,DES加密解密类 DESEncrypt 简单实用,直接导入。
【ASP.NET实现DES加密解密类】的知识点详解 在ASP.NET中,有时我们需要对敏感数据进行加密处理,以确保其在传输或存储时的安全性。DES(Data Encryption Standard)是一种常用的对称加密算法,适合对小量数据进行...
DES加密 解密 方法: DESr DESw 支持3DES加密 解密 类中利用函数重载的方式 实现两种加密方式 加密后为16进制字符串 使用方法: 实例化一个对象 然后就可以随便用了。 如 DES加密 解密 CString sd,sd2; yxyDES2 ...
DES加密解密算法的C语言实现 DES(Data Encryption Standard)是一种对称密钥 BLOCK 加密算法,使用 56 位密钥对 64 位数据块进行加密。下面是 DES 加密解密算法的 C 语言实现的知识点总结。 字节与二进制转换 在...
标题中的“3DES加密解密工具”指的是一个用于执行三重数据加密标准(3DES,Triple DES)的软件工具,这种工具通常用于保护敏感数据的安全,确保信息在传输过程中的机密性。3DES是DES(Data Encryption Standard,...
3DES加密解密的全工具类,快速帮助新人进行3Des加密解密
在给定的“des加密例程”中,可能包含了一个调用动态链接库(DLL)实现DES加密解密的示例代码。DLL是Windows操作系统中的一种共享库,可以被多个程序同时调用,节省内存资源并便于代码复用。这个示例可能涉及以下...
对数据进行单DES或者3DES加密或者解密,如果密码长度为8字节则为DES加密或者解密
在实现DES加密解密的过程中,首先需要理解DES的基本步骤,包括初始置换、扩展置换、8轮Feistel网络、逆扩展置换和逆初始置换。在MFC环境中,这些步骤可以通过定义类和函数来实现。例如,可以创建一个名为`CDES`的类...
总结来说,VB6.0中实现DES加密解密涉及理解DES算法原理,利用`DESCryptoServiceProvider`类进行加密解密操作,并通过文件操作函数存储和读取加密数据。虽然DES已经过时,但在某些场景下,它仍然可以作为一个学习和...
DES加密解密(c++实现)
总之,VB实现DES加密解密涉及.NET框架中的DESCryptoServiceProvider类,以及可能的VBA与.NET组件的交互。理解加密算法的原理和正确使用加密库是确保数据安全的基础。在实际项目中,还需要结合其他安全措施,如哈希...
Java和JavaScript之间的DES加密解密是信息安全领域中的一个重要话题,主要涉及到数据的保护和通信的安全。DES(Data Encryption Standard)是一种古老的对称加密算法,尽管它在安全性上已不被视为最佳选择,但在某些...
des加密解密工具
在C++中实现DES加密解密,可以创建一个类来封装相关的操作,这样有利于代码的复用和维护。 描述中提到的"单倍双倍加密算法的实现",可能是指使用DES算法进行一次或两次加密的过程。单次DES加密使用同一个密钥对数据...
vue DES加密解密工具类 des.js,与博文中的匹配,为封装好的完整工具类
在MFC环境下实现DES加密解密,你需要了解以下几个关键点: 1. **密钥扩展**:首先,56位的密钥需要经过一个称为PC-1的置换表进行转换,然后每轮使用不同的子密钥产生器(C1到C8)生成48位的子密钥。 2. **初始置换...
标题中的“3DES加密解密”指的是在信息技术领域中,使用三重数据加密标准(3DES,Triple Data Encryption Standard)进行数据加密和解密的过程。3DES是一种加强版的DES加密算法,它通过三次应用DES的加密过程来提高...