Java开发经验分享之JAVA简单实现DES加密与实现DES解密

前言:相信很多小伙伴在开发过程中都会加密问题。当然,小菜在开发中也遇到了,这里呢,小菜想说的是JAVA简单实现DES加密。

今天就简单实现一下如何DES加密解密。话不多说,代码如下。直接可用。希望能成为你项目中的一个很好的工具类。

public class DesEncrypt {

    // DES加密密钥key
    public static String key = "sdfDA12r3JHV214IJrwerDSO892BK2345nrekk35oewr4wrwrenlklknsdlemifzkw8iiiifegJG7649UJNDFJSvgsfdjFGDFGj435jUhjhjbkajb12kj987gsjh9834tbAXiudhf9B3PM4bt98dyf9Q2m97jjyf417aliD";

    // DES加密明文plaintext
    @SuppressWarnings("static-access")
    public static String encryptDES(String plaintext) {
        try {
            // 首先,DES算法要求有一个可信任的随机数源,可以通过 SecureRandom类,内置两种随机数算法,NativePRNG和SHA1PRNG
            SecureRandom random = new SecureRandom();
            // 创建一个DESKeySpec对象
            DESKeySpec desKey = new DESKeySpec(key.getBytes());
            // 创建一个密匙工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            // 将DESKeySpec对象转换成SecretKey对象
            SecretKey securekey = keyFactory.generateSecret(desKey);
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance("DES");
            // 用密匙初始化Cipher对象
            cipher.init(cipher.ENCRYPT_MODE, securekey, random);
            // 加密生成密文byte数组
            byte[] cipherBytes = cipher.doFinal(plaintext.getBytes());
            // 将密文byte数组转化为16进制密文
            String ciphertext = byteToHex(cipherBytes);
            return ciphertext;
        } catch (Throwable e) {
            e.printStackTrace();
        }

        return null;
    }

    // DES解密
    @SuppressWarnings("static-access")
    public static String decryptDES(String ciphertext) {
        try {
            // DES算法要求有一个可信任的随机数源,SecureRandom内置两种随机数算法,NativePRNG和SHA1PRNG,        // 通过new来初始化,默认来说会使用NativePRNG算法生成随机数,但是也可以配置-Djava.security参数来修改调用的算法,        // 如果是/dev/[u]random两者之一就是NativePRNG,否则就是SHA1PRNG。
            SecureRandom random = new SecureRandom();
            // 创建一个DESKeySpec对象
            DESKeySpec desKey = new DESKeySpec(key.getBytes());
            // 创建一个密匙工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            // 将DESKeySpec对象转换成SecretKey对象
            SecretKey securekey = keyFactory.generateSecret(desKey);
            // Cipher对象实际完成解密操作
            Cipher cipher = Cipher.getInstance("DES");
            // 用密匙初始化Cipher对象
            cipher.init(cipher.DECRYPT_MODE, securekey, random);
            // 将16进制密文转化为密文byte数组
            byte[] cipherBytes = hexToByte(ciphertext);
            // 真正开始解密操作
            String plaintext = new String(cipher.doFinal(cipherBytes));
            return plaintext;
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return null;
    }

    // 将byte转化为16进制
    public static String byteToHex(byte[] bs) {
        if (0 == bs.length) {
            return "";
        } else {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < bs.length; i++) {
                String s = Integer.toHexString(bs[i] & 0xFF);
                if (1 == s.length()) {
                    sb.append("0");
                }
                sb = sb.append(s.toUpperCase());
            }
            return sb.toString();
        }
    }

    // 将16进制转化为byte
    public static byte[] hexToByte(String ciphertext) {
        byte[] cipherBytes = ciphertext.getBytes();
        if ((cipherBytes.length % 2) != 0) {
            throw new IllegalArgumentException("长度不为偶数");
        } else {
            byte[] result = new byte[cipherBytes.length / 2];
            for (int i = 0; i < cipherBytes.length; i += 2) {
                String item = new String(cipherBytes, i, 2);
                result[i / 2] = (byte) Integer.parseInt(item, 16);
            }
            return result;
        }
    }
   // 进行测试
    public static void main(String[] args) {
        // 当前时间戳
        long timestamp = System.currentTimeMillis();
        System.out.println(timestamp);
        // 待加密内容
        String str = "测试内容:Mr.JimYi" + timestamp;
        // 密码,长度要是8的倍数
        String ciphertext = encryptDES(str);
        System.out.println("加密后:" + ciphertext);
        String plaintext = decryptDES(ciphertext);
        System.out.println("解密后:" + plaintext);
        String t = plaintext.substring(plaintext.length() - 13,
                plaintext.length());
        System.out.println(t);
    }
}

原文地址:https://www.cnblogs.com/JimYi/p/10330888.html

时间: 2024-10-13 04:47:16

Java开发经验分享之JAVA简单实现DES加密与实现DES解密的相关文章

微信小程序des加密、PHP des解密

最近在做对小程序传输数据进行加密,加密方法有很多,使用的是des对称加密 采用的是CBC模式, 引用的插件为tripledes.js,https://github.com/Favour1111in/hello-world/tree/master 需要传入内容,密钥,初始化向量3个参数 var server = require('../../utils/server.js'); var CryptoJS = require('../../utils/tripledes.js'); Page({ /

java知识分享网|java学习路线最详细的路线

来源[www.51dali.cn][51dali资料分享网-免费资料下载] 下载说明-获取以下资料密码请访问:http://www.51dali.cn/javajiaocheng/10.html 第一阶段 java基础资料下载地址链接:https://pan.baidu.com/s/1dRp8t-QS4G3VoP3s-d9Agw mysql数据库视频教程 链接:https://pan.baidu.com/s/12TA2LvemGej3ajFWOOCeXg jdbc操作数据库视频教程 链接:htt

IOS、java支持DES加密

最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现.现在我们需要实现的是移动端和后台 (java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA是非对称加密,更加安全点,但是RSA加密的过程中,ios公钥加密的数据,后台 java是能够解密成功,但是后台java私钥加密的东西,前端ios,就没有解密成功,实验了很多方法,最终也没有成功,所以就放弃了,转向了安全性差 一点的DES加密. 对于DES.RSA的介绍,自己百度去吧,因为我也说不明

oracle 使用 base64 des 加密解密

平时使用到的base .des 加密方法 对于des 加解密 的秘钥 长度为8位,当输入的秘钥位数大于8位自动截取. 包头 create or replace package pkg_compare is  function f_en_base64(pi_str varchar2) return varchar2;  function f_de_base64(pi_str varchar2) return varchar2;  procedure p_decrypt_des  (    pi_s

兼容PHP和Java的des加密解密代码分享

这篇文章主要介绍了兼容PHP和Java的des加密解密代码分享,适合如服务器是JAVA语言编写,客户端是PHP编写,并需要des加密解密的情况,需要的朋友可以参考下 php <?php class DES { var $key; var $iv; //偏移量 function DES($key, $iv=0) { $this->key = $key; if($iv == 0) { $this->iv = $key; } else { $this->iv = $iv; } } //加

【Java】分享一个使用DES加密和解密的算法

[Java]分享一个使用DES加密和解密的算法 分享一个使用DES加密和解密的算法,当前这个算法已经应用到项目中: package com.util; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.Key; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.c

关于 Des加密(Android与ios 与后台java服务器之间的加密解密)

关于 Des加密(Android与ios  与后台java服务器之间的加密解密) http://blog.sina.com.cn/s/blog_7c8dc2d50101id91.html (2013-04-17 11:47:23)   分类: iPhone开发 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的DES加密的时候遇到了一些问题,起初怎么调都调不

JAVA使用DES加密解密

在使用DES加密解密的时候,遇到了一些问题,廖记一下.如有哪位大神亲临留言指点,不胜感激. 先上代码: public DESUtil() { } //密码,长度要是8的倍数 注意此处为简单密码 简单应用 要求不高时可用此密码 /*DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解.*/ private stati

JAVA实现DES加密

JAVA实现DES加密 DES加密介绍 DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解.虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现. JAVA实现 加密 代码有详细解释,不多废话. 注意:DES加密和解密过程中,密钥长度都必须是8的倍数 [java] view