工作中用到一个DES解码问题,废了一份周折总算做出来了。这里把代码贴出来,希望对大家有用。
import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; public class DESTool { private static final String Algorithm = "DESede"; //定义加密算法 public static final String CIPHER_ALGORITHM = "DESede/CBC/PKCS5Padding"; //public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; public static final String IV = "12345678"; /** * 加密 * @param datasource * @param password * @return */ public static byte[] desCrypto(byte[] src, String password) { try { DESedeKeySpec deskey = new DESedeKeySpec(password.getBytes()); SecretKeyFactory skf = SecretKeyFactory.getInstance(Algorithm); Key key = skf.generateSecret(deskey); Cipher cipher1 = Cipher.getInstance(CIPHER_ALGORITHM); IvParameterSpec iv = new IvParameterSpec(IV.getBytes()); cipher1.init(Cipher.ENCRYPT_MODE, key,iv); return cipher1.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 src * @param password * @return * @throws Exception */ public static byte[] decrypt(byte[] src, String password) { try { DESedeKeySpec deskey = new DESedeKeySpec(password.getBytes()); SecretKeyFactory skf = SecretKeyFactory.getInstance(Algorithm); Key key = skf.generateSecret(deskey); Cipher cipher1 = Cipher.getInstance(CIPHER_ALGORITHM); IvParameterSpec iv = new IvParameterSpec(IV.getBytes()); cipher1.init(Cipher.DECRYPT_MODE, key,iv); return cipher1.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 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 byte[] hex2byte(String hex) { int arrayLenth = hex.length() / 2; byte[] inputByteArray = new byte[arrayLenth]; for (int x = 0; x < arrayLenth; x++) { int beginIndex = x * 2; int endIndex = beginIndex +2; int coventInt = Integer.valueOf(hex.substring(beginIndex,endIndex),16); inputByteArray[x] = (byte)coventInt; } return inputByteArray; } public static String util_decrypt(String encodString){ String password = "0123456789abcd9876543210"; byte[] srcBytes = decrypt(hex2byte(encodString),password); return new String(srcBytes); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //添加新安全算法,如果用JCE就要把它添加进去 Security.addProvider(new com.sun.crypto.provider.SunJCE()); String password="0123456789abcd9876543210"; String szSrc = "37231dcf2bc2cf202f47b419c1cfb9fce1c14d2e86a93b6d1012fefff90c6ea6719a311e7c4e3e757fe98426226148d75eadbade59e6e440f8459beac47be790"; //String szSrc = "{\"cn\":\"xiongjun\",\"sn\":\"xiongjun\",\"__tick\":1395929492055}"; //System.out.println("加密前的字符串:" + szSrc); //byte[] encoded = desCrypto(szSrc.getBytes(),password); //System.out.println("加密后的字符串:" + byte2Hex(encoded)); byte[] srcBytes = decrypt(hex2byte(szSrc),password); //byte[] srcBytes = decrypt(encoded,password); System.out.println("解密后的字符串:" + new String(srcBytes)); System.out.println(password.length()); }
相关推荐
AES/CBC/PKCS5Padding,加密解决 支持javascript、java、iOS
主要介绍了Java实现AES/CBC/PKCS7Padding加解密的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
* 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容 * */ class CryptDes { var $key; var $iv; function CryptDes($key, $iv){ $this->key = $key; $this->iv = $iv; } function encrypt($input){ $...
PHP版DES加解密类 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容
ios-3des-demoDESede/CBC/PKCS5Padding 加密
使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难。内含MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用
一个 DESede(3DES) CBC PKCS5Padding的单元,与java c# 计算结果相同。利用本单元思路可以扩展到其他模式。
DES_DESede_AES算法DES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AES
本算法基于网上javascript des和3des加密解密算法修改,实现了与标准java des和3des加密解密算法的互操作。
MD5算法,URLEncoding,Base64编码,AES,DES,DESede,RSA加密解密工具类和使用实例
网上常用的对称加密一般就这三种吧,与APP中常用的那些也基本能对上。调用修改的是 CryptoJS, https://github.com/brix/crypto-js/。连同mode和padding一共108种。@镇坛道德标杆。
关于密钥的一些算法、常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难。本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用。
加解密小工具,可加解密文本,也可加解密任何类型文件。功能包括:字符加密、属性加密、文件加密。下载解压即可使用。
如何产生和保存密钥:选择DESede算法,密钥长度为112位或168位,用Java对象序列化保存私钥,通常应对私钥加密后再保存
■Symmetric key algorithms: AES, Blowfish, Camellia, CAST5, CAST6, DESede, DES, GOST28147, HC-128, HC-256, IDEA, NaccacheStern, RC2, RC4, RC5-32, RC5-64, RC6, Rijndael, Serpent, Skipjack, TEA/XTEA, ...
定义 加密算法,可用 DES,DESede,Blowfish
php 稳定加密解密类php
【开发者开源大赛】常见的AES、DES、3DES(DESede)的108种JS加密
自己总结的3des java开发 的加解密过程 介绍各个api的使用方法
MD4,MD5弱信息摘要算法使用SHA-1弱信息摘要算法错误字符转换DES / DESede使用RSA Nopadding RSA密钥长度问题欧洲央行模式加密无预先验证CBC / PKCS5Padding模式外部文件存储发送广播消息未设置接收权限发送粘性广播...