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

网友投稿 302 2023-03-23


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

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中初始化MediaRecorder的实现方法
下一篇:Angular4实现鼠标悬停3d倾斜效果
相关文章

 发表评论

暂时没有评论,来抢沙发吧~