DES根据键值加密解密

时间:2022-05-17 09:10:47
import java.io.IOException;
import java.net.URLEncoder;
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";     /**
     * 
     * Description 根据键值进行加密
     * @param data
     * @param key
     *            加密键byte数组
     * @return
     * @throws Exception
     */     public static String encrypt(String data, String key) throws Exception {         byte[] bt = encrypt(data.getBytes("utf-8"), 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, "utf-8");     }     /**
     * 
     * 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);
    }     public static void main(String[] args) throws Exception {
        String period = "validateKey=123456789";   
        period = DesUtil.encrypt(period, "aopencom");
        period = URLEncoder.encode(period, "UTF-8").replace("*","*").replace("~", "~").replace("+"," ");
        System.out.println(period);
        
    } }

DES根据键值加密解密的更多相关文章

  1. python中常用的base64 md5 aes des crc32等的加密解密

    1.base64 Python内置的base64模块可以实现base64.base32.base16.base85.urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形 ...

  2. DES带IV向量加密解密工具

    链接:http://pan.baidu.com/s/1kVAV80J  密码:sgys 鉴于网上的DES加密解密都是不带IV向量的 我就自制了一个带IV向量的DES加密解密的小工具 © 2016-20 ...

  3. JAVA使用DES加密算法加密解密

    程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...

  4. java 实现 DES加密 解密算法

    DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...

  5. SELECT INTO和INSERT INTO SELECT的区别 类似aaa?a=1&b=2&c=3&d=4,如何将问号以后的数据变为键值对 C# 获取一定区间的随即数 0、1两个值除随机数以外的取值方法(0、1两个值被取值的概率相等) C# MD5 加密,解密 C#中DataTable删除多条数据

    SELECT INTO和INSERT INTO SELECT的区别   数据库中的数据复制备份 SELECT INTO: 形式: SELECT value1,value2,value3 INTO Ta ...

  6. NET实现RSA AES DES 字符串 加密解密以及SHA1 MD5加密

    本文列举了    数据加密算法(Data Encryption Algorithm,DEA) 密码学中的高级加密标准(Advanced EncryptionStandard,AES)RSA公钥加密算法 ...

  7. .NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现

    场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组. 问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距 分析:平台不 ...

  8. 一个java的DES加密解密类转换成C#

    一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...

  9. C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

    一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...

随机推荐

  1. multi-CPU, multi-core and hyper-thread--转

    原文地址:http://*.com/questions/680684/multi-cpu-multi-core-and-hyper-thread Multi-CPU was t ...

  2. IIS短文件名泄露漏洞危害及防范方法

    危害级别:轻微 IIS短文件名泄露漏洞 WASC Threat Classification 描述: Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件 ...

  3. 黄聪:wordpress更新失败‘C:\Windows\TEMP/wordpress.tmp’,更换临时保存路径的解决办法

    1.如果可劲进入远程桌面,则给C:\WINDOWS\TEMP目录设置IIS访问权限. 2.虚拟机的方法:首先用FTP软件在网页空间wp-content目录中新建一个[tmp]目录,然后在wp-conf ...

  4. git知识总结-1.git基础之基本术语

    1.前言 git是一种分布式版本管理工具,本文主要是通过阅读博客中几篇讲述git的优秀文章,并对文章进行整理.提炼总结得出一份git的说明文档. 本文档介绍了git的基本原理及常用操作,目标是通过阅读 ...

  5. ASP.NET MVC什么时候使用异步Action

    在没有使用异步Action之前,在Action内,比如有如下的写法: public ActionResult Index() CustomerHelper cHelper = new Customer ...

  6. MySQL软件基本管理

    1. 忘记密码 windows平台下,5.6.43版本mysql # 关闭mysql # 在cmd中执行:mysqld --skip-grant-tables # 在cmd中执行:mysql # 执行 ...

  7. Sql 截取字段中的字符串

    取 a 字段里有字符x后面的数 right(a, charindex('x',reverse(a))-1))      reverse(字段) 这个函数是把字段倒过来并转换成nvarchar类型 取 ...

  8. 【转】求职面试-HR会问你什么问题?

    前言 面试是程序员们经常探讨的话题,只要你通过前面的技术面,最后一面必然是HR面试,基本上到了这关你离Offer的距离应该不会太远了,但有的公司的HR是有刷入的权利,如果你并不能很好的应对HR的问题, ...

  9. [转]使用 Angular CLI 和 ng-packagr 构建一个标准的 Angular 组件库

    使用 Angular CLI 构建 Angular 应用程序是最方便的方式之一. 项目目标 现在,我们一起创建一个简单的组件库. 首先,我们需要创建一个 header 组件.这没什么特别的,当然接下来 ...

  10. iOS笔记之网络

    用POST方式上传数据时,数组怎么处理? NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data ...