java加密算法之DES篇

2023-10-27

闲话不多说,我们直接上干货

加密
 public static String encrypt(String datasource) {
     try{
         DESKeySpec desKey = new DESKeySpec(PASSWORD.getBytes());
         //创建一个密匙工厂,获取secretKey
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
         SecretKey secretKey = keyFactory.generateSecret(desKey);
         //指定获取DES的Cipher对象
         Cipher cipher = Cipher.getInstance("DES");
         //用密匙初始化Cipher对象
         cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom());
         //数据加密
         return parseByte2HexStr(cipher.doFinal(datasource.getBytes("utf-8")));
     }catch(Throwable e){
         e.printStackTrace();
     }
     return null;
 }
解密
public static String decrypt(String src){
    try{
        // 创建一个DESKeySpec对象,PASSWORD可任意指定
        DESKeySpec desKey = new DESKeySpec(PASSWORD.getBytes());
        // 创建一个密匙工厂
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        // 生成密钥
        SecretKey secretkey = keyFactory.generateSecret(desKey);
        // 指定获取DES的Cipher对象
        Cipher cipher = Cipher.getInstance("DES");
        // 用密匙初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, secretkey, new SecureRandom());
        // 真正开始解密操作
        return new String(cipher.doFinal(parseHexStr2Byte(src)));
    }catch(Throwable e){
        e.printStackTrace();
    }
    return null;
}
测试
 public static void main(String[] args) {
      String str = "I'm encode content";

      String result = DesUtils.encrypt(str);
      System.out.println("encode result is :"+result);
      //直接将如上内容解密
      try {
          String decryResult = DesUtils.decrypt(result);
          System.out.println("Decode result is :"+decryResult);
      } catch (Exception e1) {
          e1.printStackTrace();
      }
 }
测试结果

在这里插入图片描述

全代码
public class DesUtils {


    private static final String PASSWORD = "9588028820109132570743325311898426347857298773549468758875018579537757772163084478873699447306034466200616411960574122434059469100235892702736860872901247123456";

    public DesUtils() {
    }
    
    /**
     * 加密
     * @param datasource
     * @return
     */
    public static String encrypt(String datasource) {
        try{
            DESKeySpec desKey = new DESKeySpec(PASSWORD.getBytes());
            //创建一个密匙工厂,获取secretKey
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKey);
            //指定获取DES的Cipher对象
            Cipher cipher = Cipher.getInstance("DES");
            //用密匙初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom());
            //数据加密
            return parseByte2HexStr(cipher.doFinal(datasource.getBytes("utf-8")));
        }catch(Throwable e){
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 解密
     * @param src
     * @return
     */
    public static String decrypt(String src){
        try{
            // 创建一个DESKeySpec对象,PASSWORD可任意指定
            DESKeySpec desKey = new DESKeySpec(PASSWORD.getBytes());
            // 创建一个密匙工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            // 生成密钥
            SecretKey secretkey = keyFactory.generateSecret(desKey);
            // 指定获取DES的Cipher对象
            Cipher cipher = Cipher.getInstance("DES");
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, secretkey, new SecureRandom());
            // 真正开始解密操作
            return new String(cipher.doFinal(parseHexStr2Byte(src)));
        }catch(Throwable e){
            e.printStackTrace();
        }
        return null;
    }

    /**将二进制转换成16进制
     * @param buf
     * @return
     */
    public static String parseByte2HexStr(byte buf[]) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < buf.length; i++) {
            String hex = Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }

    /**将16进制转换为二进制
     * @param hexStr
     * @return
     */
    public static byte[] parseHexStr2Byte(String hexStr) {
        if (hexStr.length() < 1) {
            return null;
        }
        byte[] result = new byte[hexStr.length()/2];
        for (int i = 0;i< hexStr.length()/2; i++) {
            int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
            int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }

}

>>>源码下载链接>>>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java加密算法之DES篇 的相关文章

随机推荐

  • PostMan的使用注意事项

    在使用postman的时候 记得把参数的值都给全了 不要少参数 否则会报错 提交的参数写在Params的key value对里就行 还要记得路径要写对
  • 牛顿迭代法求解多元函数的最小值--以二元函数为例

    python 牛顿迭代法求解多元函数的最小值 以二元函数为例 本文转载链接 https blog csdn net qq 45726331 article details 115804812 一元函数到多元函数的牛顿迭代法 python代码
  • 【数据结构】(树总结)二叉树搜索/查找树

    转载来源 https blog csdn net abc 12366 article details 79428739 普通查找树bst 承接之前的 树 本文将目标特别锁定在 查找树 这里整理出我遇到的各种形式的查找树 以后可能会不定期更新
  • JavaScript数据结构——字典

    JavaScript中的字典 字典的特点 键值一一对应 字典和数组对比 字典可以非常方便的通过key来搜索对应的value key可以包含特殊含义 也更容易被人们记住 字典和对象 在其他语言中字典和对象区分比较明显 对象通常是一种在编译期就
  • html src设置二进制流,如何从可中止的AJAX请求返回二进制图像数据并将结果设置为HTML / DOM图像的src?...

    我正在编写一个Web应用程序 它涉及在网页上创建 和删除 大量图像的连续循环 每个图像由服务器动态生成 var img document createElement img img src http mydomain com myImage
  • Maven依赖外部jar包配置

    1 添加依赖路径
  • Abaqus应力结点数据导出与处理

    Abaqus应力数据导出 Abaqus中导出每个应力结点数据 输出数据处理 Abaqus中导出每个应力结点数据 从工具 查询 查询值中打开 如下图所示 接下来点击查询值出现该对话框 在查询值对话框内依次点击选择一个显示组 位置 选择单元结点
  • Typescript结合React实践

    作者 慕晨同学 原文地址 https juejin im post 5d37b5d9f265da1bd605e5e1 写在前面 Typescript是JavaScript的一个超集 主要提供了类型系统和对es6的支持 本人使用ts编写rea
  • PyTorch开始使用的一些问题

    一 GPU支持 首先访问PyTorch的主页点 install 跳转到Start Locally PyTorch 根据自己的需要点相应的内容得到命令 如上图所示 可以直接运行其中的 pip3 install torch torchvisio
  • 详细程序注解学OpenCL一 环境配置和入门程序

    本专栏是通过注解程序的方法学习OpenCL 我觉得一个一个地去抠原理也不是办法 干脆直接学习程序 然后把相关原理都直接注解到程序语句当中 原创地址 http blog csdn net kenden23 article details 14
  • 微信小程序主要API总结

    微信小程序是一种轻量级的应用 提供了丰富的API接口 可实现许多功能 包括用户授权 数据缓存 位置信息 转发分享 支付等等 以下是微信小程序主要API总结 用户授权 API wx login 调用该 API 可以获取用户登录状态 wx ge
  • 分享ckplayerX2/ckplayerX1/dplayer/video.js/aliplayer/74player/xgplayer等自制网页播放器,高手勿喷,新手一定会喜欢的。你确定不进来看看。

    CKX2player 演示地址 http m3u8 22web org ckx2 index php url https vod2 buycar5 cn 20201007 yPvaZ7C1 index m3u8 下载地址 https 21s
  • AES与DES加密解密算法

    一 AES简介 AES Advanced Encryption Standard 高级加密标准 的出现 是因为以前使用的DES算法密钥长度较短 已经不适应当今数据加密安 全性的要求 因此2000年10月2日 美国政府宣布将比利时密码学家Jo
  • 循环链表的作用

    作用是循环链表是无须增加存储量 仅对表的链接方式稍作改变 即可使得表处理更加方便灵活 循环链表中没有NULL指针 涉及遍历操作时 其终止条件就不再是像非循环链表那样判别p或p next是否为空 而是判别它们是否等于某一指定指针 如头指针或尾
  • Vijava 学习笔记之 VirtualMachine(状态(通电状态))

    package com vmware util import com vmware vim25 mo ServiceInstance import java net URL Created by vixuan 008 on 2015 4 1
  • ubuntu安装新版QQ

    我一直无法解决Ubuntu QQ问题 而最近我重装ubuntu之后在网络上找到与QQ相关的内容 网上有大神开发出了新版的wineQQ 解决了我们对QQ的需求 经过尝试 完成了QQ安装 如图 安装的是wine QQ 那么 1 首先安装wine
  • Ubuntu20.04安装Xmind

    安装思维导图软件MindMaster 安装 安装包下载地址https www edrawsoft cn download mindmaster all 找到Linux下的Ubuntu版本 并点击下载安装包 如下图 是我下载时选择的版本 然后
  • inner class java_Java内部类(Inner Class)详解

    Java内部类 Inner Class 详解 简单的说 内部 inner 类指那些类定义代码被置于其它类定义中的类 而对于一般的 类定义代码不嵌套在其它类定义中的类 称为顶层 top level 类 对于一个内部类 包含其定义代码的类称为它
  • html5随机颜色怎么写,js随机颜色代码的多种实现方式

    JS随机颜色有很多地方要用到 比如大家看到很多标签连接都是五颜六色 那就需要到这个了 下面开始 方法思路总共有二 一是准备一组漂亮的候选颜色 二是随机生成颜色 实现1 var getRandomColor function return f
  • java加密算法之DES篇

    闲话不多说 我们直接上干货 加密 public static String encrypt String datasource try DESKeySpec desKey new DESKeySpec PASSWORD getBytes 创