Java对称加密算法DES实例详解

 更新时间:2019年09月10日 11:11:49   作者:cakincqm  
这篇文章主要介绍了Java对称加密算法DES,结合实例形式详细分析了java DES算法的概念、原理、实现方法与应用场景,需要的朋友可以参考下

本文实例讲述了Java对称加密算法DES。分享给大家供大家参考,具体如下:

一 DES算法概述

1、介绍

DES:Data Encryption Standard 数据加密标准。

2、DES算法参数

二 DES算法Java实现

package com.imooc.security.des;
import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class ImoocDES {
    private static String src = "cakin24 security des";
    public static void main(String[] args) {
        jdkDES();
        bcDES();
    }
    public static void jdkDES() {
        try {
            //生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            keyGenerator.init(56);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] bytesKey = secretKey.getEncoded();
            //KEY转换
            DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
            SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
            Key convertSecretKey = factory.generateSecret(desKeySpec);
            //加密
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("jdk des encrypt : " + Hex.encodeHexString(result));
            //解密
            cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
            result = cipher.doFinal(result);
            System.out.println("jdk des decrypt : " + new String(result));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void bcDES() {
        try {
            Security.addProvider(new BouncyCastleProvider());
            //生成KEY
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES", "BC");
            keyGenerator.getProvider();
            keyGenerator.init(56);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] bytesKey = secretKey.getEncoded();
            //KEY转换
            DESKeySpec desKeySpec = new DESKeySpec(bytesKey);
            SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
            Key convertSecretKey = factory.generateSecret(desKeySpec);
            //加密
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
            byte[] result = cipher.doFinal(src.getBytes());
            System.out.println("bc des encrypt : " + Hex.encodeHexString(result));
            //解密
            cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
            result = cipher.doFinal(result);
            System.out.println("bc des decrypt : " + new String(result));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三 实现效果

jdk des encrypt : fce3e47941952379b860ca6dd00e0632b45e1edd02d4d843
jdk des decrypt : cakin24 security des
bc des encrypt : 13a41ff56157a7bb40b5ef77eca83bba9a444d1b5c89de11
bc des decrypt : cakin24 security des

四 DES算法应用场景

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 使用Spring事件监听机制实现跨模块调用的步骤详解

    使用Spring事件监听机制实现跨模块调用的步骤详解

    Spring 事件监听机制是 Spring 框架中用于在应用程序的不同组件之间进行通信的一种机制,Spring 事件监听机制基于观察者设计模式,使得应用程序的各个部分可以解耦,提高模块化和可维护性,本文给大家介绍了使用Spring事件监听机制实现跨模块调用,需要的朋友可以参考下
    2024-06-06
  • mybatis spring配置SqlSessionTemplate的使用方式

    mybatis spring配置SqlSessionTemplate的使用方式

    这篇文章主要介绍了mybatis spring配置SqlSessionTemplate的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中的CompletableFuture异步编程详解

    Java中的CompletableFuture异步编程详解

    这篇文章主要介绍了Java中的CompletableFuture异步编程详解,只要提到多线程来优化性能,那么必定离不开异步化,异步化的出现才是多线程优化性能这个核心方案的基础,需要的朋友可以参考下
    2023-12-12
  • MyBatisPlus条件构造器图文实例详解

    MyBatisPlus条件构造器图文实例详解

    这篇文章主要介绍了MyBatisPlus条件构造器,了解内部原理是为了帮助我们做扩展,同时也是验证了一个人的学习能力,如果你想让自己的职业道路更上一层楼,这些底层的东西你是必须要会的
    2023-01-01
  • Java中通过三级缓存解决Spring循环依赖详解

    Java中通过三级缓存解决Spring循环依赖详解

    这篇文章主要介绍了Java中通过三级缓存解决Spring循环依赖详解,当出现两个或多个 Bean 在初始化时相互依赖的情况时,Spring Boot 会将其中一个 Bean 提前暴露出来,以便其他 Bean 能够在初始化时正确地引用它,这一策略能有效避免循环依赖导致的问题,需要的朋友可以参考下
    2023-09-09
  • SpringBoot在线代码修改器的问题及解决方法

    SpringBoot在线代码修改器的问题及解决方法

    这篇文章主要介绍了SpringBoot在线代码修改器的问题及解决方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例

    JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例

    这篇文章主要介绍了JAVA获得包含0-9、a-z、A-Z范围内字符串的的随机数实例,包含随机数字、随机字符串的获取方法,需要的朋友可以参考下
    2014-07-07
  • Java实现简单局域网聊天室

    Java实现简单局域网聊天室

    这篇文章主要为大家详细介绍了Java实现简单局域网聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java并发包之CopyOnWriteArrayList类的深入讲解

    Java并发包之CopyOnWriteArrayList类的深入讲解

    这篇文章主要给大家介绍了关于Java并发包之CopyOnWriteArrayList类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • PowerJob UseCacheLock工作流程源码剖析

    PowerJob UseCacheLock工作流程源码剖析

    这篇文章主要为大家介绍了PowerJob UseCacheLock工作流程源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论