運行:regsvr32 c:\windows\system32\hhctrl.ocx

          package ?des;?

          import ?java.io. * ;?
          import ?java.nio. * ;?
          import ?java.nio.channels.FileChannel;?

          public ? class ?FileDES{?
          private ? static ? final ? boolean ?enc = true ;? // 加密?
          private ? static ? final ? boolean ?dec = false ;? // 解密?

          private ?String?srcFileName;?
          private ?String?destFileName;?
          private ?String?inKey;?
          private ? boolean ?actionType;?
          private ?File?srcFile;?
          private ?File?destFile;?
          private ?Des?des;?

          private ? void ?analyzePath(){?
          String?dirName;?
          int ?pos = srcFileName.lastIndexOf( " / " );?
          dirName
          = srcFileName.substring( 0 ,pos);?
          File?dir
          = new ?File(dirName);?
          if ?( ! dir.exists()){?
          System.err.println(dirName
          + " ?is?not?exist " );?
          System.exit(
          1 );?
          }
          else ? if ( ! dir.isDirectory()){?
          System.err.println(dirName
          + " ?is?not?a?directory " );?
          System.exit(
          1 );?
          }?

          pos
          = destFileName.lastIndexOf( " / " );?
          dirName
          = destFileName.substring( 0 ,pos);?
          dir
          = new ?File(dirName);?
          if ?( ! dir.exists()){?
          if ( ! dir.mkdirs()){?
          System.out.println?(
          " can?not?creat?directory: " + dirName);?
          System.exit(
          1 );?
          }?
          }
          else ? if ( ! dir.isDirectory()){?
          System.err.println(dirName
          + " ?is?not?a?directory " );?
          System.exit(
          1 );?
          }?
          }?

          private ? static ? int ?replenish(FileChannel?channel,ByteBuffer?buf)? throws ?IOException{?
          long ?byteLeft = channel.size() - channel.position();?
          if (byteLeft == 0L )?
          return ? - 1 ;?
          buf.position(
          0 );?
          buf.limit(buf.position()
          + (byteLeft < 8 ? ? ?( int )byteLeft?: 8 ));?
          return ?channel.read(buf);?
          }?

          private ? void ?file_operate( boolean ?flag){?
          des
          = new ?Des(inKey);?
          FileOutputStream?outputFile
          = null ;?
          try ?{?
          outputFile
          = new ?FileOutputStream(srcFile, true );?
          }
          catch ?(java.io.FileNotFoundException?e)?{?
          e.printStackTrace(System.err);?
          }?
          FileChannel?outChannel
          = outputFile.getChannel();?

          try {?
          if (outChannel.size() % 2 != 0 ){?
          ByteBuffer?bufTemp
          = ByteBuffer.allocate( 1 );?
          bufTemp.put((
          byte ) 32 );?
          bufTemp.flip();?
          outChannel.position(outChannel.size());?
          outChannel.write(bufTemp);?
          bufTemp.clear();?
          }?
          }
          catch (Exception?ex){?
          ex.printStackTrace(System.err);?
          System.exit(
          1 );?
          }?
          FileInputStream?inFile
          = null ;?
          try {?
          inFile
          = new ?FileInputStream(srcFile);?
          }
          catch (java.io.FileNotFoundException?e){?
          e.printStackTrace(System.err);?
          // System.exit(1);?
          }?
          outputFile
          = null ;?
          try ?{?
          outputFile
          = new ?FileOutputStream(destFile, true );?
          }
          catch ?(java.io.FileNotFoundException?e)?{?
          e.printStackTrace(System.err);?
          }?

          FileChannel?inChannel
          = inFile.getChannel();?
          outChannel
          = outputFile.getChannel();?


          ByteBuffer?inBuf
          = ByteBuffer.allocate( 8 );?
          ByteBuffer?outBuf
          = ByteBuffer.allocate( 8 );?

          try {?
          String?srcStr;?
          String?destStr;?
          while ( true ){?

          if ?(replenish(inChannel,inBuf) ==- 1 )? break ;?
          srcStr
          = ((ByteBuffer)(inBuf.flip())).asCharBuffer().toString();?
          inBuf.clear();?
          if ?(flag)?
          destStr
          = des.enc(srcStr,srcStr.length());?
          else ?
          destStr
          = des.dec(srcStr,srcStr.length());?
          outBuf.clear();?
          if ?(destStr.length() == 4 ){?
          for ?( int ?i? = ? 0 ;?i < 4 ;?i ++ )?{?
          outBuf.putChar(destStr.charAt(i));?
          }?
          outBuf.flip();?
          }
          else {?
          outBuf.position(
          0 );?
          outBuf.limit(
          2 * destStr.length());?
          for ?( int ?i? = ? 0 ;?i < destStr.length();?i ++ )?{?
          outBuf.putChar(destStr.charAt(i));?
          }?
          outBuf.flip();?
          }?

          try ?{?
          outChannel.write(outBuf);?
          outBuf.clear();?
          }
          catch ?(java.io.IOException?ex)?{?
          ex.printStackTrace(System.err);?
          }?
          }?
          System.out.println?(inChannel.size());?
          System.out.println?(outChannel.size());?
          System.out.println?(
          " EoF?reached. " );?
          inFile.close();?
          outputFile.close();?
          }
          catch (java.io.IOException?e){?
          e.printStackTrace(System.err);?
          System.exit(
          1 );?
          }?
          }?

          public ?FileDES(String?srcFileName,String?destFileName,String?inKey, boolean ?actionType){?
          this .srcFileName = srcFileName;?
          this .destFileName = destFileName;?
          this .actionType = actionType;?
          analyzePath();?
          srcFile
          = new ?File(srcFileName);?
          destFile
          = new ?File(destFileName);?
          this .inKey = inKey;?
          if ?(actionType == enc)?
          file_operate(enc);?
          else ?
          file_operate(dec);?
          }?


          public ? static ? void ?main(String[]?args){?
          String?file1
          = System.getProperty( " user.dir " ) + " /111.doc " ;?
          String?file2
          = System.getProperty( " user.dir " ) + " /222.doc " ;?
          String?file3
          = System.getProperty( " user.dir " ) + " /333.doc " ;?
          String?passWord
          = " 1234ABCD " ;?
          FileDES?fileDes
          = new ?FileDES(file1,file2,passWord, true );?
          FileDES?fileDes1
          = new ?FileDES(file2,file3,passWord, false );?
          }
          posted on 2006-07-01 21:37 pear 閱讀(567) 評論(0)  編輯  收藏 所屬分類: 技術
           
          主站蜘蛛池模板: 东阿县| 西林县| 连州市| 平度市| 江孜县| 搜索| 平罗县| 枣强县| 赤城县| 彰化市| 定西市| 宝鸡市| 五莲县| 浙江省| 三都| 焉耆| 体育| 东莞市| 奈曼旗| 钟山县| 柳林县| 六盘水市| 休宁县| 织金县| 汉阴县| 左云县| 临江市| 安溪县| 鹤壁市| 金昌市| 白水县| 惠水县| 天水市| 苏尼特右旗| 义乌市| 开化县| 秀山| 万州区| 乌拉特前旗| 襄城县| 武强县|