三重Des对称加密在Android、Ios 和Java 平台的实现

718 阅读2分钟

###引言 如今手机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版 `package com.v1.linxun.portal.utils;

import java.security.Key;

import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec;

/**

  • 3DES加密工具类 */ public class Des3Util { // 密钥 长度不得小于24 private final static String secretKey = "123456789012345678901234" ; // 向量 可有可无 终端后台也要约定 private final static String iv = "01234567"; // 加解密统一使用的编码方式 private final static String encoding = "utf-8";

    /**
    * 3DES加密
    *
    * @param plainText
    *            普通文本
    * @return
    * @throws Exception
    */
    public static String encode(String plainText) throws Exception {
         Key deskey = null;
         DESedeKeySpec spec = new DESedeKeySpec(secretKey .getBytes());
         SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede");
          deskey = keyfactory.generateSecret( spec);
    
         Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding");
         IvParameterSpec ips = new IvParameterSpec( iv.getBytes());
          cipher.init(Cipher. ENCRYPT_MODE, deskey, ips);
          byte[] encryptData = cipher.doFinal( plainText.getBytes( encoding));
          return Base64. encode( encryptData);
    

    }

    /**
    * 3DES解密
    *
    * @param encryptText
    *            加密文本
    * @return
    * @throws Exception
    */
    public static String decode(String encryptText) throws Exception {
         Key deskey = null;
         DESedeKeySpec spec = new DESedeKeySpec( secretKey.getBytes());
         SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede");
          deskey = keyfactory. generateSecret( spec);
         Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );
         IvParameterSpec ips = new IvParameterSpec( iv.getBytes());
          cipher. init(Cipher. DECRYPT_MODE, deskey, ips);
    
          byte[] decryptData = cipher. doFinal(Base64. decode(encryptText ));
    
          return new String( decryptData, encoding);
    

    }

    public static void main(String args[]) throws Exception{
         String str = "你好" ;
         System. out.println( "----加密前-----:" + str );
         String encodeStr = Des3Util. encode( str);
         System. out.println( "----加密后-----:" + encodeStr );
         System. out.println( "----解密后-----:" + Des3Util.decode( encodeStr));
    

    } } `