Java实现的3des加密解密工具类示例

作者:CharlinGod 时间:2023-08-21 14:00:01 

本文实例讲述了Java实现的3des加密解密工具类。分享给大家供大家参考,具体如下:


package com.gcloud.common;
import org.apache.poi.poifs.property.Child;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.*;
import java.security.spec.AlgorithmParameterSpec;
/**
* 三重数据加密算法工具类
* Created by charlin on 2017/9/11.
*/
public class V3DESUtil {
 //密钥存放位置
 public static String FILENAME = "d:/3des.key";
 // 1为加密,0为解密
 private int isEncrypt = -1;
 // 加密/解密密钥,长度为16byte或者24byte。
 private String keyStr;
 // 要加密/解密信息(解密时需为十六进制显示的字符串)
 private String message;
 public V3DESUtil() {
 }
 public V3DESUtil(int isEncrypt, String keyStr, String message) {
   this.isEncrypt = isEncrypt;
   this.keyStr = keyStr;
   this.message = message;
 }
 //numStr = 12345678
 public String V3DESChiper(String numStr) {
   String result = null;
   try {
     Security.addProvider(new BouncyCastleProvider());
     URL url = getClass().getResource(FILENAME);
     File myFile = new File(FILENAME);
     if (!myFile.exists()) {
       return "Can't Find " + FILENAME;
     }
     try {
       BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
       while ((keyStr = in.readLine()) == null) {
         return "读取密钥失败!";
       }
       in.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
     SecretKey key = new SecretKeySpec(keyStr.getBytes(), "DESede");
     result = null;
     byte[] textByte = null;
     byte[] messageByte = null;
     Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding", "BC");
     AlgorithmParameterSpec spec = new IvParameterSpec(numStr.getBytes());
     if (isEncrypt == 1) {
       messageByte = message.getBytes();
       cipher.init(Cipher.ENCRYPT_MODE, key, spec);
     } else if (isEncrypt == 0) {
       messageByte = decodeHex(message);
       cipher.init(Cipher.DECRYPT_MODE, key, spec);
     } else {
       return "加解密设置错误,请确认输入:1为加密;0为解密";
     }
     textByte = cipher.doFinal(messageByte);
     if (isEncrypt == 1) {
       result = encodeHex(textByte);
     } else if (isEncrypt == 0) {
       result = new String(textByte);
     }
   } catch (Exception e) {
     e.printStackTrace();
   }
   return result;
 }
 public static final String encodeHex(byte bytes[]) {
   StringBuffer buf = new StringBuffer(bytes.length * 2);
   for (int i = 0; i < bytes.length; i++) {
     if ((bytes[i] & 0xff) < 16)
       buf.append("0");
     buf.append(Long.toString(bytes[i] & 0xff, 16));
   }
   return buf.toString();
 }
 public static final byte[] decodeHex(String hex) {
   char chars[] = hex.toCharArray();
   byte bytes[] = new byte[chars.length / 2];
   int byteCount = 0;
   for (int i = 0; i < chars.length; i += 2) {
     int newByte = 0;
     newByte |= hexCharToByte(chars[i]);
     newByte <<= 4;
     newByte |= hexCharToByte(chars[i + 1]);
     bytes[byteCount] = (byte) newByte;
     byteCount++;
   }
   return bytes;
 }
 private static final byte hexCharToByte(char ch) {
   switch (ch) {
     case 48: // '0'
       return 0;
     case 49: // '1'
       return 1;
     case 50: // '2'
       return 2;
     case 51: // '3'
       return 3;
     case 52: // '4'
       return 4;
     case 53: // '5'
       return 5;
     case 54: // '6'
       return 6;
     case 55: // '7'
       return 7;
     case 56: // '8'
       return 8;
     case 57: // '9'
       return 9;
     case 97: // 'a'
       return 10;
     case 98: // 'b'
       return 11;
     case 99: // 'c'
       return 12;
     case 100: // 'd'
       return 13;
     case 101: // 'e'
       return 14;
     case 102: // 'f'
       return 15;
     case 58: // ':'
     case 59: // ';'
     case 60: // '<'
     case 61: // '='
     case 62: // '>'
     case 63: // '?'
     case 64: // '@'
     case 65: // 'A'
     case 66: // 'B'
     case 67: // 'C'
     case 68: // 'D'
     case 69: // 'E'
     case 70: // 'F'
     case 71: // 'G'
     case 72: // 'H'
     case 73: // 'I'
     case 74: // 'J'
     case 75: // 'K'
     case 76: // 'L'
     case 77: // 'M'
     case 78: // 'N'
     case 79: // 'O'
     case 80: // 'P'
     case 81: // 'Q'
     case 82: // 'R'
     case 83: // 'S'
     case 84: // 'T'
     case 85: // 'U'
     case 86: // 'V'
     case 87: // 'W'
     case 88: // 'X'
     case 89: // 'Y'
     case 90: // 'Z'
     case 91: // '['
     case 92: // '\\'
     case 93: // ']'
     case 94: // '^'
     case 95: // '_'
     case 96: // '`'
     default:
       return 0;
   }
 }
 public static String getFILENAME() {
   return FILENAME;
 }
 public int getIsEncrypt() {
   return isEncrypt;
 }
 public void setIsEncrypt(int isEncrypt) {
   this.isEncrypt = isEncrypt;
 }
 public String getKeyStr() {
   return keyStr;
 }
 public void setKeyStr(String keyStr) {
   this.keyStr = keyStr;
 }
 public String getMessage() {
   return message;
 }
 public void setMessage(String message) {
   this.message = message;
 }
 public static void main(String[] args) {
   String key = "yycg12345678901234567890";
   String oldstring = "test" + "#" + "test" + "#" + System.currentTimeMillis();
   V3DESUtil tempDesEn = new V3DESUtil(1, oldstring, key);
   String strTemp = tempDesEn.V3DESChiper("12345678");
   System.out.println("strTemp=== " + strTemp);
   V3DESUtil tempDe = new V3DESUtil(0, strTemp, key);
   String strTempDe = tempDe.V3DESChiper("12345678");
   System.out.println("strTempDe===" + strTempDe);
 }
}

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

希望本文所述对大家java程序设计有所帮助。

来源:http://blog.csdn.net/lovoo/article/details/77937656

标签:Java,3des,加密
0
投稿

猜你喜欢

  • c#数字图像处理的3种方法示例分享

    2021-10-09 09:56:51
  • c#读写ini配置文件示例

    2023-09-29 16:31:36
  • springboot后端配置多个数据源、Mysql数据库的便捷方法

    2022-05-01 07:21:37
  • 详细分析Java内存模型

    2022-01-31 09:37:05
  • 一文详解C++模板和泛型编程

    2022-12-28 09:40:46
  • Java中的三种标准注解和四种元注解说明

    2022-04-25 05:39:46
  • Java采用循环链表结构求解约瑟夫问题

    2022-07-27 16:35:59
  • java如何让带T的时间格式化

    2022-12-22 10:44:28
  • ubuntu环境下反编译android apk的方法

    2022-08-09 13:41:41
  • spring cloud 配置中心native配置方式

    2022-06-13 00:36:32
  • 通过与Java功能上的对比来学习Go语言

    2023-02-18 02:04:53
  • C# Random类随机函数实例详解

    2021-09-12 04:26:42
  • Jetpack navigation组件超详细讲解

    2021-07-17 08:49:58
  • 解决问题:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources

    2023-11-23 23:40:39
  • Unity创建平铺网格地图的方法

    2022-07-06 16:05:49
  • kotlin延迟初始化和密封类详细讲解

    2022-07-10 01:53:52
  • Java栈之链式栈存储结构的实现代码

    2022-01-18 09:38:48
  • Android 基于Socket的聊天应用实例(二)

    2023-11-02 21:48:32
  • C++ 异常处理 catch(...)介绍

    2023-06-24 05:35:32
  • Java中的权限修饰符(protected)示例详解

    2023-04-16 10:23:24
  • asp之家 软件编程 m.aspxhome.com