利用3DES實現加密解密的Java代碼

7n5e 9年前發布 | 5K 次閱讀 Java 加密

采用ECB,補位模式為:PKCS5

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**

  • 項目名稱:**
  • 類名稱:ThreeDES
  • 類描述: 3des 加密工具類
  • @version 1.0
    / public class ThreeDES {

    //key 根據實際情況對應的修改 private final byte[] keybyte="123456788765432112345678".getBytes(); //keybyte為加密密鑰,長度為24字節 private static final String Algorithm = "DESede"; //定義 加密算法,可用 DES,DESede,Blowfish private SecretKey deskey; ///生成密鑰 public ThreeDES(){

    deskey = new SecretKeySpec(keybyte, Algorithm);
    

    } //加密 public byte[] encrypt(byte[] data){

     try {
         Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
         cipher.init(Cipher.ENCRYPT_MODE, deskey);
         return cipher.doFinal(data);
     } catch (Exception ex) {
         //加密失敗,打日志
         ex.printStackTrace();
     } 
     return null;
    

    } //解密 public byte[] decrypt(byte[] data){

    try {
         Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
         cipher.init(Cipher.DECRYPT_MODE,deskey);
         return cipher.doFinal(data);
     } catch (Exception ex) {
         //解密失敗,打日志
         ex.printStackTrace();
     } 
     return null;
    

    }

public static void main(String[] args) throws Exception { ThreeDES des=new ThreeDES(); String req ="135|一二|10100001|410883198501285014|||||1|2|"; // String req1 ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><service><head><field name=\"spdtrancode\">11111</field><field name=\"spdtranserno\">CM0172061308908f4dc995222321f6ecb888</field><field name=\"spdressys\">2001</field><field name=\"spdresdate\">20141223</field><field name=\"spdrestime\">153606</field><field name=\"spdtranstate\">S</field><field name=\"spderrocode\"></field><field name=\"spderrormsg\"></field></head><body><field name=\"spdcheckrslt\">000000</field></body></service>";

   String toreq  =toHexString(req);
   System.err.println("十六進制報文===="+toreq);
   byte [] srcData=req.toString().getBytes("GBK");
   byte[] encryptData=des.encrypt(srcData);
   System.out.println("密文:");
   if(encryptData!=null){
       for(int i=0;i<encryptData.length;i++){
           String hex=Integer.toHexString(encryptData[i]);
           if(hex.length()>1)
            System.out.print(hex.substring(hex.length()-2)+" ");
           else
            System.out.print("0"+hex+" ");
       }
   }
   System.out.println("");
   System.out.println("明文:");

}

// 轉化字符串為十六進制編碼 public static String toHexString(String s) { String str = ""; for (int i = 0; i < s.length(); i++) { int ch = (int) s.charAt(i); String s4 = Integer.toHexString(ch); str = str + s4; } return str; } }</pre>

 本文由用戶 7n5e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!