JAVA DES加密和解密工具类

news/2025/2/8 16:11:29

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

package com.afreon.util;
 
import java.io.IOException;
import java.security.SecureRandom;
 
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
 
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
public class DesUtil {
 
    private final static String DES = "DES";
 
    public static void main(String[] args) throws Exception {
        String data = "123 456";
        String key = "wang!@#$%";
        System.err.println(encrypt(data, key));
        System.err.println(decrypt(encrypt(data, key), key));
 
    }
     
    /**
     * Description 根据键值进行加密
     * @param data 
     * @param key  加密键byte数组
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
        byte[] bt = encrypt(data.getBytes(), key.getBytes());
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }
 
    /**
     * Description 根据键值进行解密
     * @param data
     * @param key  加密键byte数组
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
            Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf,key.getBytes());
        return new String(bt);
    }
 
    /**
     * Description 根据键值进行加密
     * @param data
     * @param key  加密键byte数组
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance(DES);
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }
     
     
    /**
     * Description 根据键值进行解密
     * @param data
     * @param key  加密键byte数组
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }
}

 

转载于:https://my.oschina.net/kkrgwbj/blog/655215


http://www.niftyadmin.cn/n/4585925.html

相关文章

Web3 网络效应:五种心智模型

Web3 网络效应:五种心智模型 在过去的十年里,网络效应推动了Web2平台的崛起,也奠定了其主导地位,同时激发了建设者和投资者的想象力。一些人认为网络效应在Web3中会更加强大,而另一些人则认为Web3会扼杀网络效应。 在…

注意padding-top 百分比定义基于父元素宽度的百分比上内边距!!是基于宽度

定义和用法 padding-top 属性设置元素的上内边距(空间)。 说明 该属性设置元素上内边距的宽度。行内非替换元素上设置的上内边距不会影响行高计算,因此,如果一个元素既有内边距又有背景,从视觉上看可能延伸到其他行&am…

卡牌NFT游戏的角逐:Shiryo能否脱颖而出?

卡牌NFT游戏的角逐:Shiryo能否脱颖而出? Shiryo想要创造一款NFT交易卡牌游戏,让玩家能够享受其中,而不是去玩游戏来赚钱。 现在我们已经看到,区块链领域中许多“玩赚”游戏的失败之处,就是他们试图创造一种…

Hue编辑器命令执行

每一代人都有自己的命中注定的遗憾。遗憾,深深的遗憾。 唯一能自慰的是,我们曾真诚而充满激情地在这个世界上生活过,竭尽全力地劳动过, 并不计代价地将自己的血汗献给了不死的人类之树。 漏洞描述 Hue编辑器存在命令执行漏洞&am…

NFT创作者需要的9个基本工具

NFT创作者需要的9个基本工具 从CRM系统到电子商务平台和移动应用程序,各行各业的企业都前所未有地依赖于数字技术。NFT的世界也是如此——为了保持客户的参与度和粘性,我们需要利用大量的数字平台。 现在有一系列工具,使创建和铸造NFT变得轻…

exit和abort都是用来终止程序的函数

exit会做一些释放工作:释放所有的静态的全局的对象,缓存,关掉所有的I/O通道,然后终止程序。如果有函数通过atexit来注册,还会调用注册的函数。不过,如果atexit函数扔出异常的话,就会直接调用ter…

如何在 Web 3领域中工作?

如何在 Web 3领域中工作? 工作类型、态度和特征 加密货币或Web 3领域的工作,凭借稳定的增长势头和丰厚的薪酬水平,正迅速成为顶级人才的热门选择。这篇文章将帮助读者理清这一领域的工作类型,如果他们想申请相关职位,…

ASP.NET Core 2 学习笔记(九)模型绑定

原文:ASP.NET Core 2 学习笔记(九)模型绑定ASP.NET Core MVC的Model Binding会将HTTP Request数据,以映射的方式对应到参数中。基本上跟ASP.NET MVC差不多,但能Binding的来源更多了一些。本篇将介绍ASP.NET Core的Model Binding。…