`
01jiangwei01
  • 浏览: 542755 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AES,DESede/CBC/PKCS5Padding

 
阅读更多

工作中用到一个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()); 
	}

 

分享到:
评论

相关推荐

    java/javascript/iOS的AES加解密(AES/CBC/PKCS5Padding)

    本文将深入探讨AES加密,特别是使用CBC(Cipher Block Chaining,密码块链接)模式和PKCS5Padding填充方式,并在JavaScript、Java和iOS平台上实现这一加密过程。 **一、AES加密简介** AES是一种对称加密算法,由...

    Java实现AES/CBC/PKCS7Padding加解密的方法

    "Java实现AES/CBC/PKCS7Padding加解密的方法" Java实现AES/CBC/PKCS7Padding加解密的方法是指使用Java语言实现AES对称加密算法的加解密过程,其中包括了加密和解密两个步骤。AES是一种对称加密算法,使用同一个密钥...

    ios-3des-demo:DESedeCBCPKCS5Padding 加密

    本项目“ios-3des-demo”提供了在Objective-C语言中实现`DESede/CBC/PKCS5Padding`加密方法的示例。以下是关于这个主题的详细知识点: 1. **DESede (Triple DES)** - 三重DES(3DES)是DES(Data Encryption ...

    java AES,DES,3DES,RAS,DSA 加密算法实现

    在Java中,可以使用`Cipher.getInstance("DESede/CBC/PKCS5Padding")`进行3DES加密。 4. **RSA( Rivest-Shamir-Adleman)** RSA是一种非对称加密算法,基于大整数因子分解的困难性。它有两个密钥:公钥用于加密,...

    java对几种加密算法的实现

    cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); ``` 3. **AES(Advanced Encryption Standard)**:是目前广泛使用的对称加密标准,支持128、192和256位密钥。在Java中,可以这样使用: ```java ...

    获取对称密钥及对称加解密demo-java

    在Java中,可以使用`Cipher.getInstance("AES/CBC/PKCS5Padding")`来初始化AES加密器,其中"CBC"代表了密码分组链接模式,增强了安全性。 对于上述所有算法,密钥的生成通常通过`java.security.SecureRandom`来创建...

    DES加密解析,ECB,CBC

    5. **微平台**:使用`DESede/CBC/PKCS5Padding`加密方式。这里需要将密钥转换为Hex格式,并且初始化向量通常设置为固定的数组(例如{1,2,3,4,5,6,7,8}),明文使用UTF-8编码。 #### 五、总结 DES作为一种经典的...

    如何产生和保存密钥,选择DESede算法

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(aesKeyBytes, "AES")); byte[] encryptedDesedeKey = cipher.doFinal(desedeKey.getEncoded());...

    IBM加密算法

    对于3DES,可以使用`Cipher.getInstance("DESede/CBC/PKCS5Padding")`创建实例,这里的"DESede"表示3DES。密钥同样需要通过`DESedeKeySpec`生成。 在实际开发中,需要考虑加密算法的安全性和效率,以及合规性问题,...

    实现使用3des在页面js加密,后台java解密

    这里的`decrypt3DES`方法接收Base64解码后的加密字节数组和密钥,通过`Cipher`类的`DESEDE/CBC/PKCS5Padding`模式进行解密,最终得到原始信息。 在实际应用中,确保前端与后端使用的密钥一致,同时注意密钥的安全...

    des,3des,aes,md5,rsa

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); cipher.init(Cipher....

    常用MD5加密算法和3-DES加密算法java实现

    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...

    Des3加解密,带加密向量

    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv)); ``` 4. **加密和解密**:最后,使用`doFinal`方法对数据进行加密或解密...

    java中3DES加密、异或加密

    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); ``` 4. 加密和解密数据: ```java byte[] encryptedBytes = cipher.doFinal(plaintextBytes...

    Java中对字符串进行加密和解密

    cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); // 设置初始化向量 byte[] iv = "InitializationVe".getBytes(); IvParameters = new IvParameterSpec(iv); // 加密 cipher.init(Cipher.ENCRYPT...

    C#加密用JAVA解密

    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); // 设置解密模式 cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(iv.getBytes())); byte[] decryptedBytes = cipher...

    3DES 用JAVA实现,是我做的密码学课程设计。

    我们需要指定使用3DES算法,并设置工作模式(如ECB、CBC等)和填充模式(如PKCS5Padding)。 ```java Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); ``` 3. **加密操作**:使用Cipher对象的`...

    java+3des加密+和字符串转换

    初始化`Cipher`时,需要指定加密模式(如ECB、CBC等)和填充方式(如NoPadding、PKCS5Padding等)。 ```java Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, ...

    Java 加密解密之对称加密算法AES.pdf

    JDK提供了对AES的支持,允许开发者使用不同工作模式(如ECB、CBC、PCBC、CTR、CTS、CFB、CFB8到CFB128、OFB、OBF8到OFB128)和填充方式(如NoPadding、PKCS5Padding、ISO10126Padding)。示例代码展示了如何使用Java...

Global site tag (gtag.js) - Google Analytics