代码可以直接拷走使用,一些约定例如向量可以自行变动
引言
如今手机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 }