三重Des對(duì)稱加密在Android、Ios 和Java 平臺(tái)的實(shí)現(xiàn)

引言

如今手機(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));
    

    }
    }
    `

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容