package com.my.framework.util; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.util.HashMap; import java.util.Map; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 说明:DES加解密 * @version 1.0 */ public class DESEncrypter { /** * 加密Clipher */ private Cipher enCipher; /** * 解密clipher */ private Cipher deCipher; /** * KEY */ private SecretKey key = null; /** * */ private static DESEncrypter instance; public static synchronized DESEncrypter getInstance() throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException { if (instance == null) { instance = new DESEncrypter(); instance.init(); } return instance; } public synchronized void init() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { try { SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec("myKey".getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); key = keyFactory.generateSecret(dks); } catch (InvalidKeySpecException e) { e.printStackTrace(); } enCipher = Cipher.getInstance("DES"); deCipher = Cipher.getInstance("DES"); enCipher.init(Cipher.ENCRYPT_MODE, key); deCipher.init(Cipher.DECRYPT_MODE, key); } /** * 加密 * * @param str * @return * @throws UnsupportedEncodingException * @throws IllegalBlockSizeException * @throws BadPaddingException */ public String enCrypt(String str) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException { byte[] utf8 = str.getBytes("UTF8"); byte[] enc = enCipher.doFinal(utf8); return new BASE64Encoder().encode(enc); } /** * des解密 * * @param str * @return * @throws IOException * @throws IllegalBlockSizeException * @throws BadPaddingException */ public String deCrypt(String str) throws IOException, IllegalBlockSizeException, BadPaddingException { byte[] dec = new BASE64Decoder().decodeBuffer(str); byte[] utf8 = deCipher.doFinal(dec); return new String(utf8, "UTF8"); } /** * 生成KEY * * @return */ /* public static SecretKey generateSecretKey() { SecretKey secretKey = null; try { secretKey = KeyGenerator.getInstance("DES").generateKey(); FileOutputStream keyFile = new FileOutputStream("d://rd_ds.key"); ObjectOutputStream keyObject = new ObjectOutputStream(keyFile); keyObject.writeObject(secretKey); keyFile.close(); } catch (Exception e) { e.printStackTrace(); } return secretKey; }*/ public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, IOException { // DESEncrypter.generateSecretKey(); DESEncrypter des = DESEncrypter.getInstance(); String crypt = des.enCrypt("clgl_test"); System.out.println(crypt); String dc = des.deCrypt("irfiM+w48a88LPME0HnP3g=="); System.out.println(dc); } }
备注: DESKeySpec等类来源于jdk
相关推荐
基于STM32的软件加解密算法,包括DES,3DES的ECB,CBC模式。但是验证时CBC模式的初始向量为0时,数据的...已上传新的验证代码:DES_3DES加解密算法(更新),如有需要请自行在本人上传资源中查找,如有测试不过的请私信。
DES加密解密(c++实现)
DES加密解密算法的C语言实现,只要调用函数,即可实现数据的加密解密,我已经在DSP上实现。
des加解密说明及代码应用,des加解密服务端java的实现以及对js端应用的实现
DES加密解密程序的C源码.喜欢就下~~~
DES加密解密程序,VC源码值得学习借鉴
DES加密 解密 方法: DESr DESw 支持3DES加密 解密 类中利用函数重载的方式 实现两种加密方式 加密后为16进制字符串 使用方法: 实例化一个对象 然后就可以随便用了。 如 DES加密 解密 CString sd,sd2; yxyDES2 ...
des加密解密工具
C#实现的DES加解密的类文件源代码、压缩等功能。
DES加密解密实验报告,内容详细,尤其是实验原理部分写的很多,另外重点研究了DES的弱密钥问题,有运行结果截图,没有源代码。
工程实践。C语言实现简单的DES加解密。
jar包放在jmeter-lib-ext目录下,打开jmeter在函数助手中可以看到。DSE.jar为DES加解密,需要输入(明文,ENCODE,加密key(16位)或者(密文,DECODE,解密KEY(16位));
des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现
DES 加解密
Delphi7与C#实现Des加解密互通Demo,全网找遍只次一份
VB实现DES加密解密算法已测试通过如有更新另行发布
DES加密解密过程,C++实现
DES加密解密算法 C语言源代码,STM32 51单片机可用。提高产品的安全性,RAM占用小。 /* DES加密,binput:明文,boutput:密文, bkey:密钥 */
对数据进行3DES加密或者解密,如果密码长度为8字节则为DES加密或者解密
对数据进行单DES或者3DES加密或者解密,如果密码长度为8字节则为DES加密或者解密