运行: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
				); 
}