import java.security.*;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

/**
 * 字符串工具集合
 * @author Liudong
 */
public class StringUtils {

private static final String PASSWORD_CRYPT_KEY = "__jDlog_";
    private final static String DES = "DES";

/**
 * 加密
 * @param src 数据源
 * @param key 密钥,长度必须是8的倍数
 * @return   返回加密后的数据
 * @throws Exception
 */
public static byte[] encrypt(byte[] src, byte[] key)throws Exception {
                //DES算法要求有一个可信任的随机数源
                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(src);
         }

/**
          * 解密
          * @param src 数据源
          * @param key 密钥,长度必须是8的倍数
          * @return     返回解密后的原始数据
          * @throws Exception
          */
         public static byte[] decrypt(byte[] src, byte[] key)throws Exception {
                // DES算法要求有一个可信任的随机数源
                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(src);
         }
    /**
     * 密码解密
     * @param data
     * @return
     * @throws Exception
     */
    public final static String decrypt(String data){
         try {
            return new String(decrypt(hex2byte(data.getBytes()),
                  PASSWORD_CRYPT_KEY.getBytes()));
        }catch(Exception e) {
        }
        return null;
    }
    /**
     * 密码加密
     * @param password
     * @return
     * @throws Exception
     */
    public final static String encrypt(String password){
        try {
            return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes()));    
        }catch(Exception e) {
     }
        return null;
    }
/**
 * 二行制转字符串
 * @param b
 * @return
 */
    public static String byte2hex(byte[] b) {
                String hs = "";
                String stmp = "";
                for (int n = 0; n < b.length; n++) {
                        stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
                        if (stmp.length() == 1)
                                hs = hs + "0" + stmp;
                        else
                                hs = hs + stmp;
                }
                return hs.toUpperCase();
     }
    
    public static byte[] hex2byte(byte[] b) {
       if((b.length%2)!=0)
              throw new IllegalArgumentException("长度不是偶数");
                byte[] b2 = new byte[b.length/2];
                for (int n = 0; n < b.length; n+=2) {
                    String item = new String(b,n,2);
                    b2[n/2] = (byte)Integer.parseInt(item,16);
                }
       return b2;
    }

public static void main(String[] args) {
        String pwd = "测试dasdfaaaaaaa";
        System.out.println("测试数据="+pwd);
        String data = encrypt(pwd);
        System.out.println("加密后的数据data="+data);
        pwd = decrypt(data);
        System.out.println("解密后="+pwd);
        
    }
}
运行结果:

D:\java>java   StringUtils 
测试数据=测试dasdfaaaaaaa 
加密后的数据data=16FA9924D269C0BD98E5CE8AC23A42898311435A70E2DE90 
解密后=测试dasdfaaaaaaa

D:\java>

Java 实现DES加密解密相关推荐

  1. php与java的des加密解密

    与第三方接口对接des加密.解密,第三方提供java的des加密解密demo,特记录PHP与java加密解密. import javax.crypto.*; import javax.crypto.s ...

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

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

  3. java des 加密工具的使用,Java中DES加密解密工具类的实现实例

    这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...

  4. Java实现DES加密解密

    DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥. 加密原理: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位, ...

  5. Android平台和java平台 DES加密解密互通程序及其不能互通的原因

    为什么80%的码农都做不了架构师?>>>    网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DE ...

  6. java ios des加密解密_IOS、java支持DES加密

    转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...

  7. 在Java中DES加密/解密的实现[工具类]

    使用前需导入Crypto包: <dependency><groupId>org.springframework.security</groupId><arti ...

  8. Java实现DES加密解密(对称式)

    原文:https://blog.csdn.net/gs12software/article/details/83899389 对称式加密:就是加密和解密都是使用同一个密钥,如DES加密 非对称式加密: ...

  9. java des加密类_java的DES加密解密辅助类

    java的DES加密解密辅助类 package temptest; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

最新文章

  1. ES6 箭头函数易出错细节
  2. C/C++连接MySql数据库
  3. Lucene第一篇【介绍Lucene、快速入门】
  4. 限免 | PMCAFF 产品经理第一课,面向3-5年产品经理,全面提升产品能力
  5. 如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
  6. Mac 访达之下方显示
  7. stata软件不出图_请问stata软件怎样做出像revman软件一样的森林图
  8. 在U盘上运行Win8!使用 Windows To Go 制作便携的 Win8 U盘/移动硬盘教程 (视频)
  9. case when用法java,sql之case when用法详解
  10. 使用工厂方法模式设计最佳实践
  11. python对英语的要求_英语和数学都不好,但是我想学Python编程可以吗?
  12. 什么是 N+1 问题,以及如何解决 Laravel 的 N+1 问题?
  13. spring-security 学习参考网站
  14. VS的一个项目,release/debug/x64/win32的设置有没有办法一次设置?
  15. 太极图正确画法_什么是太极?其意义是什么?太极图是谁画的?
  16. 三菱PLC 闪烁动作 ST语言
  17. 试题 基础练习 特殊回文数
  18. 鲸探发布点评:7月12日发售小王子系列数字藏品
  19. css3 实现图片闪过一道光效果 亲测可用
  20. apmserv php 5.6,APMServ下载|APMServ 5.2.6 正式版下载-太平洋下载中心

热门文章

  1. MYSQL - 计算行数
  2. 算法系列(十)堆实现优先队列
  3. 新华三硬件工程师校招一面面经
  4. 2023电商运营课程入门培训分享
  5. 忽略pdf换行符直接翻译的软件——copytranslator
  6. 什么时间段申购新股?新股申购的八大时机!确定时机能挽回三年损失!
  7. c#截取字符串后几位_C#几种截取字符串的方法小结 (摘抄)
  8. TeXstudio编辑中文时文字下方出现红色波浪符的问题
  9. 双人床行业调研报告 - 市场现状分析与发展前景预测
  10. js随机生成16进制的颜色