引言
如今手機(jī)app五彩繽紛,確保手機(jī)用戶的數(shù)據(jù)安全是開(kāi)發(fā)人員必須掌握的技巧,下面通過(guò)實(shí)例介紹DES在android、ios、java平臺(tái)的使用方法;
DES加密是目前最常用的對(duì)稱加密方式,性能優(yōu)于非對(duì)稱加密(RSA),是手機(jī)app請(qǐng)求數(shù)據(jù)加密的優(yōu)先選擇。
DES簡(jiǎn)介:
DES全稱為Data Encryption Standard,即數(shù)據(jù)加密標(biāo)準(zhǔn),是一種使用密鑰加密的塊算法, 算法的入口參數(shù)有三個(gè):Key、Data、Mode。
Key:為7個(gè)字節(jié)共56位,是DES算法的工作密鑰;
Data:為8個(gè)字節(jié)64位,是要被加密或被解密的數(shù)據(jù);
Mode:為DES的工作方式,有兩種:加密或解密。
3DES簡(jiǎn)介:
3DES(或稱為T(mén)riple DES)是三重?cái)?shù)據(jù)加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當(dāng)于是對(duì)每個(gè)數(shù)據(jù)塊應(yīng)用三次DES加密算法。由于計(jì)算機(jī)運(yùn)算能力的增強(qiáng),原版DES密碼的密鑰長(zhǎng)度變得容易被暴力破解;3DES即是設(shè)計(jì)用來(lái)提供一種相對(duì)簡(jiǎn)單的方法,即通過(guò)增加DES的密鑰長(zhǎng)度來(lái)避免類(lèi)似的攻擊,而不是設(shè)計(jì)一種全新的塊密碼算法。因此比起最初的DES,3DES更為安全。
加密實(shí)例:
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加密工具類(lèi)
*/
public class Des3Util {
// 密鑰 長(zhǎng)度不得小于24
private final static String secretKey = "123456789012345678901234" ;
// 向量 可有可無(wú) 終端后臺(tái)也要約定
private final static String iv = "01234567";
// 加解密統(tǒng)一使用的編碼方式
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));
}
}
`