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

本文提供了一个Java实现的3DES加密解密工具类,详细介绍了如何使用3DES进行加密和解密操作。代码示例中包含了密钥的读取、加密解密过程,并附带了在线加密工具的链接。
摘要由CSDN通过智能技术生成

本文实例讲述了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:关于加密解密感兴趣的朋友还可以参考本站在线工具:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值