三重DEC加密在java中的实现

代码可以直接拷走使用,一些约定例如向量可以自行变动

引言
     如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android、ios、java平台的使用方法;
DES加密是目前最常用的对称加密方式,性能优于非对称加密(RSA),是手机app请求数据加密的优先选择。
 

DES简介:

     DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法, 算法的入口参数有三个:Key、Data、Mode。
     Key:为7个字节共56位,是DES算法的工作密钥;
     Data:为8个字节64位,是要被加密或被解密的数据;
     Mode:为DES的工作方式,有两种:加密或解密。
3DES简介:
     3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。因此比起最初的DES,3DES更为安全。
 
加密实例:
     java版
 1 package com.v1.linxun.portal.utils;
 2  
 3 import java.security.Key;
 4  
 5 import javax.crypto.Cipher;
 6 import javax.crypto.SecretKeyFactory;
 7 import javax.crypto.spec.DESedeKeySpec;
 8 import javax.crypto.spec.IvParameterSpec;
 9  
10 /**
11  * 3DES加密工具类
12  */
13 public class Des3Util {
14        // 密钥 长度不得小于24
15        private final static String secretKey = "123456789012345678901234" ;
16        // 向量 可有可无 终端后台也要约定
17        private final static String iv = "01234567";
18        // 加解密统一使用的编码方式
19        private final static String encoding = "utf-8";
20  
21        /**
22        * 3DES加密
23        *
24        * @param plainText
25        *            普通文本
26        * @return
27        * @throws Exception
28        */
29        public static String encode(String plainText) throws Exception {
30             Key deskey = null;
31             DESedeKeySpec spec = new DESedeKeySpec(secretKey .getBytes());
32             SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede");
33              deskey = keyfactory.generateSecret( spec);
34  
35             Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding");
36             IvParameterSpec ips = new IvParameterSpec( iv.getBytes());
37              cipher.init(Cipher. ENCRYPT_MODE, deskey, ips);
38              byte[] encryptData = cipher.doFinal( plainText.getBytes( encoding));
39              return Base64. encode( encryptData);
40       }
41  
42        /**
43        * 3DES解密
44        *
45        * @param encryptText
46        *            加密文本
47        * @return
48        * @throws Exception
49        */
50        public static String decode(String encryptText) throws Exception {
51             Key deskey = null;
52             DESedeKeySpec spec = new DESedeKeySpec( secretKey.getBytes());
53             SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede");
54              deskey = keyfactory. generateSecret( spec);
55             Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );
56             IvParameterSpec ips = new IvParameterSpec( iv.getBytes());
57              cipher. init(Cipher. DECRYPT_MODE, deskey, ips);
58  
59              byte[] decryptData = cipher. doFinal(Base64. decode(encryptText ));
60  
61              return new String( decryptData, encoding);
62       }
63       
64        public static void main(String args[]) throws Exception{
65             String str = "我要开始加密啦" ;
66             System. out.println( "----加密前-----:" + str );
67             String encodeStr = Des3Util. encode( str);
68             System. out.println( "----加密后-----:" + encodeStr );
69             System. out.println( "----解密后-----:" + Des3Util.decode( encodeStr));
70       }
71 }
原文地址:https://www.cnblogs.com/jiliunyongjin/p/7878042.html