des加密解密

DES加密解密是一种比较常用的对称加密算法,即加密和解密使用相同密钥的算法,DES使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。因为使用56位密钥,以现代机器的计算能力,24小时内即可被破解(现在有了更安全效率更高的AES)。但是在平时安全性要求不是特别高的情景或者是之前的老项目中用的还是很多的。最近在公司项目中网络请求链接用到的就是des加密,下面简单做一个总结。废话不多说直接上代码:

package com.meskal.test;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.util.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;


public class DesUtil {

    /**
     * 加密
     * 
     * @param key
     *            密钥(任意字符,密钥长度必须是8的倍数)
     * @param data
     *            待加密的字符串
     * @return 加密后的字符串
     */
    public static String encrypt(String code, String str) {
        String result = "";
        byte[] data = str.getBytes();
        // 拿到密钥工厂并利用约定好的加密/解密密钥生成加密用的key
        SecretKeyFactory skf;
        try {
            skf = SecretKeyFactory.getInstance("DES");
            DESKeySpec dks = new DESKeySpec(code.getBytes());
            SecretKey secretKey = skf.generateSecret(dks);

            SecureRandom secureRandom = new SecureRandom();
            // 拿到加密工具
            Cipher cipher = Cipher.getInstance("DES");

            cipher.init(Cipher.ENCRYPT_MODE, secretKey, secureRandom);
            // 加密
            data = cipher.doFinal(data);
            result = Base64.getEncoder().encodeToString(data);
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 解密
     * 
     * @param code
     *            密钥(任意字符,密钥长度必须是8的倍数)
     * @param str
     *            待解密字符串
     * @return 解密后字符串
     */
    public static String decrypt(String code, String str) {
        String result = "";
        byte[] data = str.getBytes();
        try {
            // 利用工厂模式生成解密密匙
            SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
            DESKeySpec dks = new DESKeySpec(data);
            SecretKey secretKey = skf.generateSecret(dks);

            SecureRandom secureRandom = new SecureRandom();
            Cipher cipher = Cipher.getInstance("DES");

            cipher.init(Cipher.DECRYPT_MODE, secretKey, secureRandom);
            data = cipher.doFinal(data);
            result = Base64.getDecoder().decode(data).toString();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (BadPaddingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return result;
    }
}

这就是java中的DES加密解密工具类,在Android中实现类似,只是Base64实现和方法不一样,现在的项目中推荐使用目前最流行的AES加密,等有时间了在撸一下AES吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • DES全称为Data EncryptionStandard,即数据加密标准,是一种使用密钥加密的块算法,1977年...
    黄晓果阅读 5,016评论 0 0
  • 刚来的时候公司网络数据传输都是用的明文,这两天说要加密传输就研究了一下des对称加密和rsa非对称加密两种加密方式...
    一点愁阅读 5,711评论 0 1
  • 随着对于安全度的不断要求,对于数据加解密与破解之间的斗争,加解密的方式也在不断发生着变化,来看看现在流行的一些加解...
    zhouhao_180阅读 6,392评论 1 12
  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 13,954评论 5 29
  • 最近项目中要求用des加密 , 之前没有用到过, 查了很多资料,为了给大家节省时间 直接上代码 des首先要用到G...
    井空烀地瓜阅读 4,101评论 0 0