工作中用到一个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(Cipher Block Chaining,密码块链接)模式和PKCS5Padding填充方式,并在JavaScript、Java和iOS平台上实现这一加密过程。 **一、AES加密简介** AES是一种对称加密算法,由...
"Java实现AES/CBC/PKCS7Padding加解密的方法" Java实现AES/CBC/PKCS7Padding加解密的方法是指使用Java语言实现AES对称加密算法的加解密过程,其中包括了加密和解密两个步骤。AES是一种对称加密算法,使用同一个密钥...
本项目“ios-3des-demo”提供了在Objective-C语言中实现`DESede/CBC/PKCS5Padding`加密方法的示例。以下是关于这个主题的详细知识点: 1. **DESede (Triple DES)** - 三重DES(3DES)是DES(Data Encryption ...
在Java中,可以使用`Cipher.getInstance("DESede/CBC/PKCS5Padding")`进行3DES加密。 4. **RSA( Rivest-Shamir-Adleman)** RSA是一种非对称加密算法,基于大整数因子分解的困难性。它有两个密钥:公钥用于加密,...
cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); ``` 3. **AES(Advanced Encryption Standard)**:是目前广泛使用的对称加密标准,支持128、192和256位密钥。在Java中,可以这样使用: ```java ...
在Java中,可以使用`Cipher.getInstance("AES/CBC/PKCS5Padding")`来初始化AES加密器,其中"CBC"代表了密码分组链接模式,增强了安全性。 对于上述所有算法,密钥的生成通常通过`java.security.SecureRandom`来创建...
5. **微平台**:使用`DESede/CBC/PKCS5Padding`加密方式。这里需要将密钥转换为Hex格式,并且初始化向量通常设置为固定的数组(例如{1,2,3,4,5,6,7,8}),明文使用UTF-8编码。 #### 五、总结 DES作为一种经典的...
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(aesKeyBytes, "AES")); byte[] encryptedDesedeKey = cipher.doFinal(desedeKey.getEncoded());...
对于3DES,可以使用`Cipher.getInstance("DESede/CBC/PKCS5Padding")`创建实例,这里的"DESede"表示3DES。密钥同样需要通过`DESedeKeySpec`生成。 在实际开发中,需要考虑加密算法的安全性和效率,以及合规性问题,...
这里的`decrypt3DES`方法接收Base64解码后的加密字节数组和密钥,通过`Cipher`类的`DESEDE/CBC/PKCS5Padding`模式进行解密,最终得到原始信息。 在实际应用中,确保前端与后端使用的密钥一致,同时注意密钥的安全...
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); cipher.init(Cipher....
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, new javax.crypto.spec.IvParameterSpec(new byte[8])); encryptedData = new sun.misc.BASE64Encoder...
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv)); ``` 4. **加密和解密**:最后,使用`doFinal`方法对数据进行加密或解密...
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); ``` 4. 加密和解密数据: ```java byte[] encryptedBytes = cipher.doFinal(plaintextBytes...
cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); // 设置初始化向量 byte[] iv = "InitializationVe".getBytes(); IvParameters = new IvParameterSpec(iv); // 加密 cipher.init(Cipher.ENCRYPT...
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); // 设置解密模式 cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(iv.getBytes())); byte[] decryptedBytes = cipher...
我们需要指定使用3DES算法,并设置工作模式(如ECB、CBC等)和填充模式(如PKCS5Padding)。 ```java Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); ``` 3. **加密操作**:使用Cipher对象的`...
初始化`Cipher`时,需要指定加密模式(如ECB、CBC等)和填充方式(如NoPadding、PKCS5Padding等)。 ```java Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, ...
JDK提供了对AES的支持,允许开发者使用不同工作模式(如ECB、CBC、PCBC、CTR、CTS、CFB、CFB8到CFB128、OFB、OBF8到OFB128)和填充方式(如NoPadding、PKCS5Padding、ISO10126Padding)。示例代码展示了如何使用Java...