A Cooly Weblog

             ::  ::  ::  ::  :: 管理

          對成加密JAVA-API實現

          Posted on 2008-05-23 23:21 acooly 閱讀(532) 評論(0)  編輯  收藏


          ??1?package?org.acooly.studio.encrypt;
          ??2?
          ??3?import?java.security.Key;
          ??4?
          ??5?import?javax.crypto.Cipher;
          ??6?import?javax.crypto.KeyGenerator;
          ??7?import?javax.crypto.SecretKey;
          ??8?import?javax.crypto.spec.IvParameterSpec;
          ??9?import?javax.crypto.spec.SecretKeySpec;
          ?10?
          ?11?import?org.apache.commons.logging.Log;
          ?12?import?org.apache.commons.logging.LogFactory;
          ?13?
          ?14?/**
          ?15??*?對稱加密JAVA算法演示(JAVA-SUN?API實現)
          ?16??*?
          ?17??*?
          ?18??*?@author?pu.zhang
          ?19??*?
          ?20??*/
          ?21?public?class?SymmetricEncryption?{
          ?22?
          ?23?????private?Log?logger?=?LogFactory.getLog(SymmetricEncryption.class);
          ?24?
          ?25?????public?static?void?main(String[]?args)?throws?Exception?{
          ?26?
          ?27?????????SymmetricEncryption?symmetricEncryption?=?new?SymmetricEncryption();
          ?28?
          ?29?????????//?DES
          ?30?????????symmetricEncryption.DESEncryption();
          ?31?????????//?3DES
          ?32?????????symmetricEncryption.tripleDESEncryption();
          ?33?
          ?34?????}
          ?35?
          ?36?????/**
          ?37??????*?DES加/解密演示
          ?38??????*?
          ?39??????*?@throws?Exception
          ?40??????*/
          ?41?????void?DESEncryption()?throws?Exception?{
          ?42?
          ?43?????????//?明文
          ?44?????????byte[]?plainText?=?"I?am?plain?text!".getBytes();
          ?45?
          ?46?????????logger.info("明文:"?+?formatedHexString(plainText));
          ?47?????????//?通過KeyGenerator形成一個key
          ?48?????????KeyGenerator?keyGenerator?=?KeyGenerator.getInstance("DES");
          ?49?????????Key?key?=?keyGenerator.generateKey();
          ?50?????????logger.info("KEY:"?+?formatedHexString(key.getEncoded()));
          ?51?
          ?52?????????//?獲得一個私鑰加密類Cipher,CBC是加密方式,PKCS5Padding是填充方法
          ?53?????????//?CBC加密方式:把明文分為左右兩部分LP和RP
          ?54?????????String?transformation?=?"DES/CBC/PKCS5Padding";?//?algorithm/mode/padding
          ?55?????????Cipher?cipher?=?Cipher.getInstance(transformation);
          ?56?
          ?57?????????//?CBC方式的初始化向量
          ?58?????????byte[]?iv?=?"iamaniv.".getBytes();
          ?59?????????IvParameterSpec?ivparam?=?new?IvParameterSpec(iv);
          ?60?????????//?加密
          ?61?????????cipher.init(Cipher.ENCRYPT_MODE,?key,?ivparam);
          ?62?????????byte[]?cipherText?=?cipher.doFinal(plainText);
          ?63?????????logger.info("加密后密文:"?+?formatedHexString(cipherText));
          ?64?
          ?65?????????//?解密
          ?66?
          ?67?????????cipher.init(Cipher.DECRYPT_MODE,?key,?ivparam);
          ?68?????????byte[]?newPlainText?=?cipher.doFinal(cipherText);
          ?69?????????logger.info("解密后明文:"?+?formatedHexString(newPlainText));
          ?70?????}
          ?71?
          ?72?????/**
          ?73??????*?DES加/解密演示
          ?74??????*?
          ?75??????*?@throws?Exception
          ?76??????*/
          ?77?????void?tripleDESEncryption()?throws?Exception?{
          ?78?????????//?24字節密鑰key,3倍DES密鑰長度
          ?79?????????byte[]?tripleKey?=?"123456789012345678901234".getBytes();
          ?80?????????logger.info("tripleKey:"?+?formatedHexString(tripleKey));
          ?81?????????//?明文
          ?82?????????byte[]?plainText?=?"I?am?plain?text!".getBytes();
          ?83?????????logger.info("初始的明文:"?+?formatedHexString(plainText));
          ?84?
          ?85?????????//?算法
          ?86?????????String?algorithm?=?"DESede";
          ?87?
          ?88?????????//?生成密鑰
          ?89?????????SecretKey?secretKey?=?new?SecretKeySpec(tripleKey,?algorithm);
          ?90?
          ?91?????????String?transformation?=?"DESede/CBC/PKCS5Padding";
          ?92?????????Cipher?cipher?=?Cipher.getInstance(transformation);
          ?93?????????//?CBC方式的初始化向量
          ?94?????????byte[]?iv?=?"iamaniv.".getBytes();
          ?95?????????IvParameterSpec?ivparam?=?new?IvParameterSpec(iv);
          ?96?
          ?97?????????//?加密
          ?98?????????cipher.init(Cipher.ENCRYPT_MODE,?secretKey,?ivparam);
          ?99?????????byte[]?encriptText?=?cipher.doFinal(plainText);
          100?????????logger.info("加密的密文:"?+?formatedHexString(encriptText));
          101?
          102?????????//?解密碼
          103?????????cipher.init(Cipher.DECRYPT_MODE,?secretKey,?ivparam);
          104?????????byte[]?newPlainText?=?cipher.doFinal(encriptText);
          105?????????logger.info("解密的明文:"?+?formatedHexString(newPlainText));
          106?????}
          107?
          108?????
          109?????/**
          110??????*?轉換byte數組為16進制的字符串顯示方式
          111??????*?@param?b
          112??????*?@return
          113??????*/
          114?????String?formatedHexString(byte[]?b)?{
          115?????????String?hs?=?"";
          116?????????String?stmp?=?"";
          117?
          118?????????for?(int?n?=?0;?n?<?b.length;?n++)?{
          119?????????????stmp?=?(java.lang.Integer.toHexString(b[n]?&?0XFF));
          120?????????????if?(stmp.length()?==?1)
          121?????????????????hs?=?hs?+?"0"?+?stmp;
          122?????????????else
          123?????????????????hs?=?hs?+?stmp;
          124?????????????if?(n?<?b.length?-?1)
          125?????????????????hs?=?hs?+?"?";
          126?????????}
          127?????????return?hs.toUpperCase();
          128?????}
          129?
          130?}
          131?


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 新民市| 伊金霍洛旗| 崇州市| 平江县| 临夏市| 茶陵县| 年辖:市辖区| 延边| 甘孜| 江北区| 凯里市| 桃园县| 恩平市| 应城市| 景泰县| 潞城市| 杭锦旗| 仙游县| 沁源县| 越西县| 崇仁县| 临漳县| 丁青县| 池州市| 东乌珠穆沁旗| 千阳县| 高州市| 宁武县| 宝鸡市| 晋中市| 荣成市| 兴文县| 连山| 华容县| 山阳县| 雷州市| 巴青县| 浪卡子县| 邢台县| 无锡市| 将乐县|