夢(mèng)幻之旅

          DEBUG - 天道酬勤

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks

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

          Java運(yùn)行時(shí)會(huì)自動(dòng)加載這些包,因此對(duì)于帶main函數(shù)的應(yīng)用程序不需要設(shè)置到CLASSPATH環(huán)境變量中。對(duì)于WEB應(yīng)用,不需要把這些包加到WEB-INF/lib目錄下。

          以下是java中調(diào)用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為加密密鑰,長(zhǎng)度為24字節(jié)
          //src為被加密的數(shù)據(jù)緩沖區(qū)(源)
          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為加密密鑰,長(zhǎng)度為24字節(jié)
          //src為加密后的緩沖區(qū)
          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;
          }

          //轉(zhuǎn)換成十六進(jìn)制字符串
          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就要把它添加進(jìn)去
          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字節(jié)的密鑰
          String szSrc = "This is a 3DES test. 測(cè)試";

          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) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 运城市| 格尔木市| 克东县| 清新县| 道真| 马山县| 富锦市| 清涧县| 龙州县| 资阳市| 周至县| 景宁| 东海县| 垦利县| 从化市| 壤塘县| 周至县| 江津市| 扶风县| 华容县| 定结县| 三穗县| 绿春县| 韶关市| 阳原县| 平乡县| 靖州| 自治县| 樟树市| 社会| 蓝山县| 宁化县| 乃东县| 星子县| 永寿县| 灵台县| 夏津县| 青海省| 衡阳市| 昭通市| 金平|