A Cooly Weblog

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

          對成加密JAVA-API實(shí)現(xiàn)

          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實(shí)現(xiàn))
          ?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形成一個(gè)key
          ?48?????????KeyGenerator?keyGenerator?=?KeyGenerator.getInstance("DES");
          ?49?????????Key?key?=?keyGenerator.generateKey();
          ?50?????????logger.info("KEY:"?+?formatedHexString(key.getEncoded()));
          ?51?
          ?52?????????//?獲得一個(gè)私鑰加密類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字節(jié)密鑰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??????*?轉(zhuǎn)換byte數(shù)組為16進(jìn)制的字符串顯示方式
          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?


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 博白县| 布拖县| 阿瓦提县| 武夷山市| 博爱县| 宁城县| 察雅县| 汉阴县| 冷水江市| 靖宇县| 陇川县| 武安市| 焦作市| 宜州市| 红河县| 甘肃省| 宁蒗| 正镶白旗| 麻城市| 宜都市| 太康县| 仙桃市| 长汀县| 长治县| 吉木乃县| 岗巴县| 湛江市| 保德县| 敦煌市| 江门市| 九龙城区| 仲巴县| 东乌珠穆沁旗| 怀宁县| 合作市| 沂水县| 永善县| 凯里市| 冕宁县| 习水县| 韶关市|