Android比DES加密更安全的算法——3DES加密算法

 转载请注明出处: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);

   

    具体的代码实现过程如下

[java] view
plain
copy

  1. package com.qust;  
  2.   
  3. import java.io.UnsupportedEncodingException;  
  4.   
  5. import javax.crypto.Cipher;  
  6. import javax.crypto.SecretKey;  
  7. import javax.crypto.spec.SecretKeySpec;  
  8.   
  9. /** 
  10.  *  
  11.  * @ClassName: com.qust.SecretUtils 
  12.  * @Description: 3DES加密解密工具类 
  13.  * @author zhaokaiqiang 
  14.  * @date 2014-11-13 下午11:28:14 
  15.  *  
  16.  */  
  17. public class DES3Utils {  
  18.   
  19.     // 定义加密算法,DESede即3DES  
  20.     private static final String Algorithm = "DESede";  
  21.     // 加密密钥  
  22.     private static final String PASSWORD_CRYPT_KEY = "zhaokaiqiang1992";  
  23.   
  24.     /** 
  25.      * 加密方法 
  26.      *  
  27.      * @param src 
  28.      *            源数据的字节数组 
  29.      * @return 
  30.      */  
  31.     public static byte[] encryptMode(byte[] src) {  
  32.         try {  
  33.             // 生成密钥  
  34.             SecretKey deskey = new SecretKeySpec(  
  35.                     build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);  
  36.             // 实例化Cipher  
  37.             Cipher cipher = Cipher.getInstance(Algorithm);  
  38.             cipher.init(Cipher.ENCRYPT_MODE, deskey);  
  39.             return cipher.doFinal(src);  
  40.         } catch (java.security.NoSuchAlgorithmException e1) {  
  41.             e1.printStackTrace();  
  42.         } catch (javax.crypto.NoSuchPaddingException e2) {  
  43.             e2.printStackTrace();  
  44.         } catch (java.lang.Exception e3) {  
  45.             e3.printStackTrace();  
  46.         }  
  47.         return null;  
  48.     }  
  49.   
  50.     /** 
  51.      * 解密函数 
  52.      *  
  53.      * @param src 
  54.      *            密文的字节数组 
  55.      * @return 
  56.      */  
  57.     public static byte[] decryptMode(byte[] src) {  
  58.         try {  
  59.             SecretKey deskey = new SecretKeySpec(  
  60.                     build3DesKey(PASSWORD_CRYPT_KEY), Algorithm);  
  61.             Cipher c1 = Cipher.getInstance(Algorithm);  
  62.             c1.init(Cipher.DECRYPT_MODE, deskey);  
  63.             return c1.doFinal(src);  
  64.         } catch (java.security.NoSuchAlgorithmException e1) {  
  65.             e1.printStackTrace();  
  66.         } catch (javax.crypto.NoSuchPaddingException e2) {  
  67.             e2.printStackTrace();  
  68.         } catch (java.lang.Exception e3) {  
  69.             e3.printStackTrace();  
  70.         }  
  71.         return null;  
  72.     }  
  73.   
  74.     /** 
  75.      * 根据字符串生成密钥24位的字节数组 
  76.      *  
  77.      * @param keyStr 
  78.      * @return 
  79.      * @throws UnsupportedEncodingException 
  80.      */  
  81.     public static byte[] build3DesKey(String keyStr)  
  82.             throws UnsupportedEncodingException {  
  83.         byte[] key = new byte[24];  
  84.         byte[] temp = keyStr.getBytes("UTF-8");  
  85.   
  86.         if (key.length > temp.length) {  
  87.             System.arraycopy(temp, 0, key, 0, temp.length);  
  88.         } else {  
  89.             System.arraycopy(temp, 0, key, 0, key.length);  
  90.         }  
  91.         return key;  
  92.     }  
  93. }  

    测试类的代码如下

[java] view
plain
copy

  1. package com.qust;  
  2.   
  3. public class Main {  
  4.   
  5.     public static void main(String[] args) {  
  6.         String msg = "使用3DES对数据进行加密";  
  7.         System.out.println("【加密前】:" + msg);  
  8.   
  9.         // 加密  
  10.         byte[] secretArr = DES3Utils.encryptMode(msg.getBytes());  
  11.         System.out.println("【加密后】:" + new String(secretArr));  
  12.   
  13.         // 解密  
  14.         byte[] myMsgArr = DES3Utils.decryptMode(secretArr);  
  15.         System.out.println("【解密后】:" + new String(myMsgArr));  
  16.     }  
  17. }  
时间: 2024-10-30 04:42:00

Android比DES加密更安全的算法——3DES加密算法的相关文章

Android用des加密,为啥UrlEncoder用utf-8编码之后=变%3D了呢?

问题描述 Android用des加密,为啥UrlEncoder用utf-8编码之后=变%3D了呢? Android用des加密,为啥UrlEncoder用utf-8编码之后=变%3D了呢? 解决方案 效果这样的 解决方案二: %3d是等号,你看下为什么url转码了. 解决方案三: 在urlencode中,=号是会被编码的,转成%3d.在http URL等中,不能直接传送等号,会进行有urlencode.

Android数据加密之Des加密_Android

前言:  有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下.  其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密

Android数据加密之Des加密详解_Android

Android DES加密的相关实现,简单的实现了一下,今天来总结一下: DES加密介绍:DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力, 24小时内即可被破解.  DES加密使用方式:  1.)DesUtil常量类介绍  private final static String HEX = "0123456789ABCDEF&q

Android数据加密之Des加密

前言: 有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法 DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出

Android数据加密之Des加密详解

Android DES加密的相关实现,简单的实现了一下,今天来总结一下: DES加密介绍: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力, 24小时内即可被破解. DES加密使用方式: 1.)DesUtil常量类介绍 private final static String HEX = "0123456789ABCDEF&quo

如何保证Android与服务器的DES加密保持一致

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     在我们的应用程序涉及到比较敏感的数据的时候,我们通常会对数据进行简单的加密.在与服务器之间的数据交互中,除了可以使用post请求来增强数据的安全性之外,我们可以使用常见的加密算法,对数据进行加密.今天主要介绍的是DES加密算法.     首先,DES属于一种对称的加密算法,所谓对称,就是说加密和解密使用的都是同一个密钥,那么在我们实际应用的时候,就是指服务器和客户端进行加密解密的时候,使用的是一个

解密-android des加密后别人如何打开?

问题描述 android des加密后别人如何打开? 我的代码是,我已经加密了,生成的文件发给别人解不开,为什么呢?发现每次的key都是不一样的,怎么让我们两个的key保持一致? 我的代码: ---------------------- public class Locker { Key key; public Locker(String str) { getKey(str);//生成密匙 } /** * 根据参数生成KEY */ public void getKey(String strKey

Java/Android DES加密

问题描述 DES的简单封装,适用于Java和Android.先简单定义几个常量/***DES工具类*@authorunicorn*@version@2015年3月10日下午3:45:05*/publicclassDES{//初始化向量,必须八位privatestaticbyte[]iv={1,2,3,4,5,6,7,8};staticfinalStringDES="DES";staticfinalStringDES_TRANSFORMATION="DES/CBC/PKCS5P

Android数据加密之SHA安全散列算法_Android

前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好奇心,所以趁着晚上没啥事,来学习一下. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法 SHA加密算法      SH