欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

【Android工具类】比DES加密更安全的算法——3DES加密算法,android3des,转载请注明出处:http

来源: javaer 分享于  点击 14076 次 点评:86

【Android工具类】比DES加密更安全的算法——3DES加密算法,android3des,转载请注明出处:http


转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的文章里面,我们讨论了DES算法,同时也明白了如何才能保证不同平台下的加密和解密结果的一致性。但是DES作为出现了很长时间的一种加密算法, 随着计算机运算能力的加强,DES加密容易被暴力破解,其安全性变得有点低。于是,为了增强数据的安全性,3DES算法就应运而生了。

 3DES,顾名思义,就是对DES加密算法的改进,3DES通过对每个数据进行3次DES加密,从而降低被破解的可能性。  如果我们要使用3DES加密,需要以下几个步骤 ①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象     SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm); ②根据算法实例化Cipher对象。它负责加密/解密     Cipher c1 = Cipher.getInstance(Algorithm); ③传入加密/解密模式以及SecretKey密钥对象,实例化Cipher对象     c1.init(Cipher.ENCRYPT_MODE, deskey); ④传入字节数组,调用Cipher.doFinal()方法,实现加密/解密,并返回一个byte字节数组     c1.doFinal(src); 具体的代码实现过程如下
    package com.qust;      import java.io.UnsupportedEncodingException;      import javax.crypto.Cipher;      import javax.crypto.SecretKey;      import javax.crypto.spec.SecretKeySpec;      /**      *       * @ClassName: com.qust.SecretUtils      * @Description: 3DES加密解密工具类      * @author zhaokaiqiang      * @date 2014-11-13 下午11:28:14      *       */      public class DES3Utils {          // 定义加密算法,DESede即3DES          private static final String Algorithm = "DESede";          // 加密密钥          private static final String PASSWORD_CRYPT_KEY = "zhaokaiqiang1992";          /**          * 加密方法          *           * @param src          *            源数据的字节数组          * @return          */          public static byte[] encryptMode(byte[] src) {              try {                  // 生成密钥                  SecretKey deskey = new SecretKeySpec(                          build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);                  // 实例化Cipher                  Cipher cipher = Cipher.getInstance(Algorithm);                  cipher.init(Cipher.ENCRYPT_MODE, deskey);                  return cipher.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          *            密文的字节数组          * @return          */          public static byte[] decryptMode(byte[] src) {              try {                  SecretKey deskey = new SecretKeySpec(                          build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);                  Cipher c1 = Cipher.getInstance(Algorithm);                  c1.init(Cipher.DECRYPT_MODE, deskey);                  return c1.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;          }          /**          * 根据字符串生成密钥24位的字节数组          *           * @param keyStr          * @return          * @throws UnsupportedEncodingException          */          public static byte[] build3DesKey(String keyStr)                  throws UnsupportedEncodingException {              byte[] key = new byte[24];              byte[] temp = keyStr.getBytes("UTF-8");              if (key.length > temp.length) {                  System.arraycopy(temp, 0, key, 0, temp.length);              } else {                  System.arraycopy(temp, 0, key, 0, key.length);              }              return key;          }      }  

测试类的代码如下```java package com.qust;

public class Main {    public static void main(String[] args) {          String msg = "使用3DES对数据进行加密";          System.out.println("【加密前】:" + msg);        // 加密          byte[] secretArr = DES3Utils.encryptMode(msg.getBytes());          System.out.println("【加密后】:" + new String(secretArr));        // 解密          byte[] myMsgArr = DES3Utils.decryptMode(secretArr);          System.out.println("【解密后】:" + new String(myMsgArr));      }  }

```

相关栏目:

用户点评