夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

          在java中調用sun公司提供的3DES加密解密算法時,需要使用到$JAVA_HOME/jre/lib/目錄下如下的4個jar包:
          jce.jar
          security/US_export_policy.jar
          security/local_policy.jar
          ext/sunjce_provider.jar

          Java運行時會自動加載這些包,因此對于帶main函數的應用程序不需要設置到CLASSPATH環境變量中。對于WEB應用,不需要把這些包加到WEB-INF/lib目錄下。

          以下是java中調用sun公司提供的3DES加密解密算法的樣本代碼:

          /*
          字符串 DESede(3DES) 加密
          */
          import java.security.*;
          import javax.crypto.*;
          import javax.crypto.spec.SecretKeySpec;

          public class ThreeDes {

          private static final String Algorithm = "DESede"; //定義 加密算法,可用 DES,DESede,Blowfish

          //keybyte為加密密鑰,長度為24字節
          //src為被加密的數據緩沖區(源)
          public static byte[] encryptMode(byte[] keybyte, byte[] src) {
          try {
          //生成密鑰
          SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

          //加密
          Cipher c1 = Cipher.getInstance(Algorithm);
          c1.init(Cipher.ENCRYPT_MODE, deskey);
          return c1.doFinal(src);
          } catch (java.security.NoSuchAlgorithmException e1) {
          e1.printStackTrace();
          } catch (javax.crypto.NoSuchPaddingException e2) {
          e2.printStackTrace();
          } catch (java.lang.Exception e3) {
          e3.printStackTrace();
          }
          return null;
          }

          //keybyte為加密密鑰,長度為24字節
          //src為加密后的緩沖區
          public static byte[] decryptMode(byte[] keybyte, byte[] src) {
          try {
          //生成密鑰
          SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);

          //解密
          Cipher c1 = Cipher.getInstance(Algorithm);
          c1.init(Cipher.DECRYPT_MODE, deskey);
          return c1.doFinal(src);
          } catch (java.security.NoSuchAlgorithmException e1) {
          e1.printStackTrace();
          } catch (javax.crypto.NoSuchPaddingException e2) {
          e2.printStackTrace();
          } catch (java.lang.Exception e3) {
          e3.printStackTrace();
          }
          return null;
          }

          //轉換成十六進制字符串
          public static String byte2hex(byte[] b) {
          String hs="";
          String stmp="";

          for (int n=0;n<b.length;n++) {
          stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
          if (stmp.length()==1) hs=hs+"0"+stmp;
          else hs=hs+stmp;
          if (n<b.length-1) hs=hs+":";
          }
          return hs.toUpperCase();
          }

          public static void main(String[] args)
          {
          //添加新安全算法,如果用JCE就要把它添加進去
          Security.addProvider(new com.sun.crypto.provider.SunJCE());

          final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte)0x88, 0x10, 0x40, 0x38
          , 0x28, 0x25, 0x79, 0x51, (byte)0xCB, (byte)0xDD, 0x55, 0x66
          , 0x77, 0x29, 0x74, (byte)0x98, 0x30, 0x40, 0x36, (byte)0xE2}; //24字節的密鑰
          String szSrc = "This is a 3DES test. 測試";

          System.out.println("加密前的字符串:" + szSrc);

          byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
          System.out.println("加密后的字符串:" + new String(encoded));

          byte[] srcBytes = decryptMode(keyBytes, encoded);
          System.out.println("解密后的字符串:" + (new String(srcBytes)));
          }
          }
          posted on 2011-06-22 10:38 HUIKK 閱讀(664) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 石景山区| 甘谷县| 海南省| 北票市| 巴彦县| 武威市| 大邑县| 三江| 平度市| 江孜县| 昌吉市| 扎鲁特旗| 惠来县| 金塔县| 乌鲁木齐市| 安福县| 三门峡市| 仲巴县| 安宁市| 盐源县| 象州县| 邹城市| 沂南县| 阿鲁科尔沁旗| 温州市| 沙田区| 保靖县| 北票市| 名山县| 郓城县| 化隆| 申扎县| 双鸭山市| 迁安市| 光山县| 旅游| 方正县| 义马市| 隆昌县| 区。| 北票市|