您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P使用Java怎么實現(xiàn)一個3des加密解密工具類,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
具體如下:
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; /** * 三重數(shù)據(jù)加密算法工具類 * 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); } }
上述就是小編為大家分享的使用Java怎么實現(xiàn)一個3des加密解密工具類了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。